Java中关键字"transient"的含义是什么?

190

我在某个地方看到了

瞬态私有TrackDAO trackDAO;
3个回答

273

你可能首先要了解什么是序列化

当对象通过网络传输时,需要将对象“序列化”,即将对象状态转换为串行字节。这些字节被发送到网络上,并从这些字节中重新创建对象。使用Java transient关键字标记的成员变量不会被传输,它们是有意丢失的。

以下是稍作修改的示例(感谢@pgras):

public class Foo implements Serializable
 {
   private String saveMe;
   private transient String dontSaveMe;
   private transient String password;
   //...
 }

5
在这种情况下,你真的需要开始通过教程进行学习。这些教程不能通过提问来代替。Integer不是关键字,它是一个类。 - Joachim Sauer
232
这个巨大的讽刺是,现在它成为了谷歌上的首个搜索结果。因此... - Richard Rast
2
开发人员实现可序列化类时,是他们负责确保瞬态成员在序列化中被排除,还是Java会自动处理? - b15

33

Java 中的瞬态变量不会被序列化。


10

这意味着trackDAO不应该被序列化。


2
这是@Transient注释,而不是关键字。 - Marcos Vasconcelos
4
@Marcos: 你在说什么?这个问题和答案都涉及到 transient 关键字。请问需要翻译的是这句话吗? - Joachim Sauer
1
Java中的瞬态变量永远不会被序列化。 - Deepak
@Joachim Sauer 实际上,我搞混了,我把volatile关键字、@Transient和'transient'混淆了。 - Marcos Vasconcelos
15
@Marcos:不是的。我想你是在谈论 javax.persistence.Transient。在这种情况下,它执行的功能与 transient 关键字类似。然而,重要的区别transient 关键字适用于序列化,而 @Transient 注释适用于使用 JPA 持久化对象。 - Joachim Sauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接