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

本文详细介绍了Java中的序列化机制,特别是transient关键字的使用。transient用于阻止对象的某些敏感信息(如密码、银行卡号)在序列化过程中被持久化。当变量被transient修饰时,其值在反序列化后将被置为默认值。此外,static变量天然不可序列化。使用transient的场景包括推导得出的属性、安全性考虑以及避免序列化特定对象(如日志实例)。了解这些细节有助于更好地管理和保护敏感数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在持久化对象时,对于一些特殊的数据成员(如用户的密码,银行卡号等),我们不想用序列化机制来保存它。为了在一个特定对象的一个成员变量上关闭序列化,可以在这个成员变量前加上关键字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实例也是不需要序列化的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值