java关键字及其含义(每日一点之Java关键字transient)

在Java中,当一个对象实现了Serilizable接口,则标志着这个对象可以被序列化(所有属性和方法都会自动序列化)。而在开发过程中,我们可能有这样的需求场景:当对象被序列化时,有的属性需要序列化,有的不需要序列化。例如:用户对象的一些敏感信息(密码、银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作)中被传输,那么,这些属性可以用transient关键字修饰。

1、用途

transient的用途在于:阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),用此关键字声明的实例变量值不会被持久化和恢复。

2、示例

java关键字及其含义(每日一点之Java关键字transient)(1)

图 2.1 User类

java关键字及其含义(每日一点之Java关键字transient)(2)

图 2.2 测试用例

java关键字及其含义(每日一点之Java关键字transient)(3)

图 2.3 测试结果

3、总结
  • 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
  • transient关键字只能修饰变量,而不能修饰方法和类。

注意:本地变量是不能被transient关键字修饰的,变量如果是用户自定义类变量,则该类需要实现Serializable接口。

  • 被transient关键字修饰的变量不能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

原因:反序列化后类中static型变量的值为当前JVM中对应static变量的值,这个值是JVM中的不是反序列化得出的。如图:

java关键字及其含义(每日一点之Java关键字transient)(4)

图 3.1 User类

java关键字及其含义(每日一点之Java关键字transient)(5)

图 3.2

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页