Java transient关键字的作用和用法
Java 的 serialization 提供了一种持久化对象实例的机制。当持久化一个对象时,可能并不想持久化所有的属性。对于这种情况,可以通过在属性前加上关键字
例如以下代码是 SuperClass 和 Sub 两个类的定义。在序列化一个 Sub 的对象 Sub 到文件时,只有 radius 会被保存到文件中。Java 代码如下:
序列化是一种将对象转换成字节序列的过程,用于解决在对对象流进行读写操作时所引发的问题。
序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库等系统里,并在需要的时候把该流读取出来重新构造成一个相同的对象。
如何实现序列化呢?其实,所有要实现序列化的类都必须实现
序列化有如下几个特点:
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
transient
来实现。例如以下代码是 SuperClass 和 Sub 两个类的定义。在序列化一个 Sub 的对象 Sub 到文件时,只有 radius 会被保存到文件中。Java 代码如下:
class SuperClass { public String name; } class Sub extends SuperClass implements Serializable { private float radius; transient int color; public static String type = "Sub"; }在分布式环境下,当进行远程通信时,无论是何种类型的数据,都会以二进制序列的形式在网络上传送。
序列化是一种将对象转换成字节序列的过程,用于解决在对对象流进行读写操作时所引发的问题。
序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库等系统里,并在需要的时候把该流读取出来重新构造成一个相同的对象。
如何实现序列化呢?其实,所有要实现序列化的类都必须实现
Serializable
接口,Serializable 接口位于 java.lang 包中,它里面没有包含任何方法。使用一个输出流(例如 FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,紧接着,使用该对象的 writeObject(Object obj)方法就可以将 obj 对象写出(即保存其状态),要恢复的时候可以使用其对应的输入流。序列化有如下几个特点:
- 如果一个类能被序列化,那么它的子类也能够被序列化。
-
由于 static(静态)代表类的成员,
transient
(Java 语言关键字,如果用 transient 声明一个实例变量,那么当对象存储时,它的值不需要维持)代表对象的临时数据,因此,被声明为这两种类型的数据成员是不能够被序列化的。 - 子类实现了 Serializable 接口,父类没有,父类中的属性不能序列化,但是子类中的属性仍能正确序列化。
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。