问题解答
在对类进行序列化标识时,常常用serialVersionUID设置一个静态final属性来表明类间不同版本的兼容性,该属性是必须的,即使没有显示的定义该属性,java序列化过程中会根据class文件自动生成一个serialVersionUID作为该类序列化版本ID号,只有同义词编译的class才会生成相同的serialVersionUID。在反序列化过程中,jvm虚拟机会把接受的字节流serialVersionUID和本地类serialVersionUID进行对比,如果相同就可以反序列化,否则会抛出InvalidClassException异常。如不希望每次编译更新都强制划分版本,可以直接显示的定义一个名为serialVersionUID这样就不会抛出异常了,如下所示:
public TstPo implements Serializable{@b@ private static final long serialVersionUID = -1L;@b@ ... @b@}