java.io.Serializable是一个标记接口,标记某个java对象可以被序列化/反序列化继承了Serializable接口的类都需要有一个serialVersionUID常量,其声明为: private static final long serialVersionUID = 123456789L; serialVersionUID 常量可以显式声明,若无显式声明,编译器会根据.java文件自动生成,若文件发生变化(多一个属性、方法、甚至空格)会导致自动生成的serialVersionUID发生改变反序列化时,如果试图反序列化的类和接收类的serialVersionUID不同,会抛出java.io.InvalidClassException反序列化时,如果serialVersionUID相同,但属性不同,按照以下规则进行反序列化:a.源多余属性不会被反序列化到目标;b.目标多余属性用默认值赋值类的静态变量不会被序列化/反序列化被transient关键字标记的属性不会被序列化/反序列化若子类继承了Serializable接口,但父类没继承,则序列化的时候不会序列化父类相关属性;反序列化的时候,先调用父类的默认构造函数,再反序列化子类