Java关键字transient

关键字transient的用途

首先我们从官方了解到该关键字的解释:

Variables may be marked transient to indicate that they are not part of the persistent state of an object.
变量被transient标记表明不是一个对象持久化的一部分。

我们知道,一个对象如果实现了Serilizable接口,就能被序列化,对象的所有属性和方法都会被序列化,Java的这种序列化模式为我们提供了很多的便利,我们可以不用关心其内部的实现原理。
在实际的开发过程中,我们希望对象的有些属性可以不用序列化,比如:用户密码、身份证号码等敏感信息,从安全角度思考,不希望该类信息在网络传输中(主要涉及到序列化操作,本地序列化缓存也适用)进行,可以理解为该类信息只存在于调用者的内存中,而不会持久化存储在磁盘中,能节省空间一定的存储空间。
用途有以下几种情况:
1)当对象的某些敏感属性不需要被序列化时。
2)当对象的某些属性可以通过其他属性推导出时。
从HashMap源码中了解到有个字段(modCount)不需要被序列化,该字段是用来记录HashMap被修改次数,在(remove、clear、put)中都会做自增,该属性刚开始可以为任何值,(new、反序列化、克隆出来都为0),所以没必要序列化。

/**
     * The number of times this HashMap has been structurally modified
     * Structural modifications are those that change the number of mappings in
     * the HashMap or otherwise modify its internal structure (e.g.,
     * rehash).  This field is used to make iterators on Collection-views of
     * the HashMap fail-fast.  (See ConcurrentModificationException).
     */
    transient int modCount;

关键字transient的使用方法

注意:该关键字只能作用于类的属性,不能用于方法、类等。

在不需要进行序列化的属性之前加上transient关键字即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值