变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持,即不持久化。也就是说不会为这个变量分配内存来保存,不知道我这样解释你明不明白?
是的,java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
第三点可能有些人很迷惑,因为发现在User类中的username字段前加上static关键字后,程序运行结果依然不变,即static类型的username也读出来为“Alexia”了,这不与第三点说的矛盾吗?实际上是这样的:第三点确实没错(一个静态变量不管是否被transient修饰,均不能被序列化),反序列化后类中static型变量username的值为当前JVM中对应static变量的值,这个值是JVM中的不是反序列化得出的
使用transient修饰符来标识一个成员变量在序列化子系统中应被忽略。
transient:
使用对象:字段
介绍:字段不是对象持久状态的一部分,不应该把字段和对象一起串起。
在JPA实体中,所有未使用Transient注释(由JPA定义)进行注释的非瞬态字段都是持久化字段。“持久化”意味着字段被映射到数据库中的列。请注意,Patient类中的一些持久化字段没有注释。这是由于JPA定义的默认值(如默认的列名称)对于这些字段来说是正确的。如果字段名称与其映射的数据库列名称不同,则必须使用Column注释来为数据库列指定一个不同的列名称。