一、概念
序列化:将对象转化成字节码的过程;
反序列化:将字节码转化为对象的过程
二、作用:
1、把对象的字节码永久存在硬盘中,进行持久化
2、在网络上传送对象的字节序列
三、静态变量序列化
序列化保存的是对象的状态,静态对象属于类的状态,因此,序列化不保存静态变量
四、序列化版本号
虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致(就是 private static final long serialVersionUID)
五、父类的序列化与 Transient 关键字
要想将父类对象也序列化,就需要让父类也实现Serializable 接口。如果父类不实现的话的,就 需要有默认的无参的构造函数。在父类没有实现 Serializable 接口时,虚拟机是不会序列化父对象的,而一个 Java 对象的构造必须先有父对象,才有子对象,反序列化也不例外。所以反序列化时,为了构造父对象,只能调用父类的无参构造函数作为默认的父对象。因此当我们取父对象的变量值时,它的值是调用父类无参构造函数后的值。如果你考虑到这种序列化的情况,在父类无参构造函数中对变量进行初始化,否则的话,父类变量值都是默认声明的值,如
int 型的默认是 0,string 型的默认是 null。
六、hashCode问题
序列化和反序列化两个对象的hashCode不同

1737

被折叠的 条评论
为什么被折叠?



