Java的transient关键字使用

transient

Java的serialization提供了一种持久化对象实例的机制。当持久化一个对象时,可能并不想持久化所有的属性。对于这种情况,可以通过在属性前加上关键字transient来实现。

例如以下代码是SuperClass和Sub两个类的定义。在序列化一个Sub的对象Sub到文件时,只有radius会被保存到文件中。

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对象写出(即保存其状态),要恢复的时候可以使用其对应的输入流。

具体而言,序列化有如下几个特点:
1)如果一个类能被序列化,那么它的子类也能够被序列化。

2)由于static(静态)代表类的成员,transient(Java语言关键字,如果用transient声明一个实例变量,那么当对象存储时,它的值不需要维持)代表对象的临时数据,因此,被声明为这两种类型的数据成员是不能够被序列化的。

3)子类实现了Serializable接口,父类没有,父类中的属性不能序列化,但是子类中的属性仍能正确序列化。

猜你喜欢

转载自blog.csdn.net/david2000999/article/details/121451252