Java常见坑11- transient 关键字的使用总结

在持久化对象时,对于一些特殊的数据成员(如用户的密码,银行卡号等),我们不想用序列化机制来保存它。为了在一个特定对象的一个成员变量上关闭序列化,可以在这个成员变量前加上关键字transient。

transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被 transient 修饰的变量值不会被持久化和恢复。(注意static修饰的静态变量天然就是不可序列化的。)

transient是短暂的意思。transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。

关于 transient 还有几点注意

  • transient 只能修饰变量,不能修饰类和方法。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
  • transient 修饰的变量,在反序列化后变量值将会被置成类型的默认值。例如,如果是修饰 int 类型,那么反序列后结果就是 0
  • static 变量因为不属于任何对象(Object),所以无论有没有 transient 关键字修饰,均不会被序列化。(如果反序列化后类中static变量还有值,则值为当前JVM中对应static变量的值)。

使用场景
(1)类中的字段值可以根据其它字段推导出来,如一个长方形类有三个属性长度、宽度、面积,面积不需要序列化。

(2)一些安全性的信息,一般情况下是不能离开JVM的。

(3)如果类中使用了Logger实例,那么Logger实例也是不需要序列化的。

你可能感兴趣的:(Java,java,开发语言,后端)