transient是控制序列化字段的关键字。
我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。但有时,某个Serilizable类中某些字段我们不愿意序列化,就可以加上transient关键字,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
- tip1:
transient也会对JSON的序列化和反序列化造成影响。
将变量标志为transient,FastJSON将不会对其进行序列化,使接收端得不到某字段。 - tip2:
类的静态变量,不标注transient关键字也不会参与序列化,会作为类定义一部分被使用。 - tip3:
如果类不是继承Serilizable,而是实现了Externalizable接口来实现序列化,transient关键字将不起作用。在Externalizable的实现类中,没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。