1、简介
1.1、英语注释
Serializability of a class is enabled by the class implementing the
java.io.Serializable interface. Classes that do not implement this
interface will not have any of their state serialized or
deserialized. All subtypes of a serializable class are themselves
serializable. The serialization interface has no methods or fields
and serves only to identify the semantics of being serializable.
1.2、中国话
序列化的类需要实现Serializable 接口,没有实现该接口的类并不会有序列化和反序列化的任何一种状态。实现了序列化接口的子类都有可序列化的特点(有序列化和反序列化的状态)。序列化接口没有任何方法和属性,实现该接口仅仅是为了在语义上标记该类已经被序列化了。
2、代码
package java.io;
public interface Serializable {
}
注意以下几点:
1、若继承的父类没有实现Serializable接口,但是又想让子类可序列化,子类实现Serializable接口,子类必须有可访问的无参构造方法,用于保存和恢复父类的public或protected或同包下的package字段的状态,否则在序列化或反序列化时会抛出RuntimeException异常,对于序列化后的子类,在进行反序列化时,理论上无法初始化父类中private(不可访问)对象变量的状态或值。
2、在对可序列化类中的属性进行序列化时,如果遇到不可序列化的对象变量,此时会针对不可序列化的类抛出NotSerializableException异常
3、对于可序列化的非数组类,强烈建议显示声明static型、long型、final型serialVersionUID字段用于标识当前序列化类的版本号,否则在跨操作系统、跨编译器之间进行序列化和反序列化时容易出现InvalidClassException异常
参考文章:
java对象实现Serializable接口