Java序列化 资源销毁
- 2022-10-01 23:21:00
- admin
- 原创 775
一、Java序列化
Serializable序列化:
1、serialVersionUID标识类的版本,序列化时写入文件,反序列化时读取进行检查;
2、serialVersionUID默认使用包名、类名、方法名、字段名、修饰符根据规则生成;
3、建议显示指定serialVersionUID,因为默认serialVersionUID可能有兼容性问题;
4、Serializable实现类要求所有字段都能够序列化,除非字段标识为transient;
5、Serializable实现类的父类如果不标识序列化,则父类成员不会参与序列化;
6、反序列化通过反射实现,序列化类构造函数不会被调用,不序列化的父类构造函数会被调用;
7、private void writeObject(ObjectOutputStream out),序列化重载函数,按需进行重载;
8、private void readObject(ObjectInputStream in),反序列化重载函数,按需进行重载;
9、private Object readResolve(),生成对象重载函数,readObject之后调用,按需进行重载;
Externalizable序列化:
1、Externalizable需要调用序列化类无参构造函数生成对象;
2、void writeExternal(ObjectOutput out),用于序列化成员变量,必须实现;
3、void readExternal(ObjectInput in),用于反序列化成员变量,必须实现;
4、private Object readResolve(),跟Serializable保持一致;
二、Java资源销毁
1、finalize是Object的方法,用于进行资源释放,子类需要重写该方法,对象被回收时会被虚拟机调用;
2、System.gc建议虚拟机进行垃圾回收,System.runFinalization建议虚拟机调用finalize方法;
3、runFinalization实际依赖gc,所以感觉runFinalization没啥用处;