Why use the `transient` keyword in java?
在Java中,在EDCOX1×1的修改器之前,我有一个与EDCOX1 0关键字相关的问题。
变量声明:
1 |
我的班级如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class LoginViewModel extends AbstractViewModel { transient private ResourceBundle pageResourceBundle; @AfterCompose public void afterCompose(@ContextParam(ContextType.VIEW) Component view) { initializeLoginValues(); boolean timeout = BooleanUtils.toBoolean(getHttpServletRequest().getParameter("timeout")); if (timeout) { Messagebox.show(pageResourceBundle.getText("MSG_SESSION_HAS_EXPIRED_PLEASE_LOGIN"), pageResourceBundle.getText("LABEL_ALERT"), Messagebox.OK, Messagebox.ERROR); } view.getPage().setTitle(CsdcLicence.get().getApplicationName()); } |
我有一些问题。
1.为什么在私有变量之前使用
2.使用此关键字的目的是什么?
Java中的过渡变量永远不会序列化。
当成员变量被持久化为字节流时,它将标记为不序列化。当一个对象通过网络传输时,该对象需要"序列化"。序列化将对象状态转换为串行字节。这些字节通过网络发送,对象从这些字节重新创建。Java临时关键字标记的成员变量没有被转移,它们是故意丢失的。
请看一下什么是序列化。?也可以参考这个
例子
1 2 3 4 5 6 7 | public class Foo implements Serializable { private String saveMe; private transient String dontSaveMe; private transient String password; //... } |
在上面的示例中,
以及一个简短的用例:
想象一下,通过公共可用的Web服务公开一个用户对象。你肯定想公开昵称,在线状态,可能是电子邮件或位置。您肯定不想公开用户登录时使用的密码。虽然此密码可能是用户对象的属性,它不应该被序列化,例如,当将所提到的WebService的对象序列化为JSON字符串时。
我已经包括了注释解释,因为我记得被这两个混淆了。-)
当从文件重新创建对象时,不会重新创建该