private static final long serialVersionUID = 1L;是用来做什么的

private static final long serialVersionUID = 1L;是定义以一个序列号。java源码里有大量的类都有这么一个序列号。目的就是把java对象序列化而后进行保存。

       java的序列化机制式通过判断类的serialVersionUID来验证版本的一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastException。

       serialVersionUID有两种显示的生成方式:

一是默认的1L,比如:private static final long serialVersionUID = 1L;

二是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:

private static final long serialVersionUID=xxxxL;

       当一个类实现了Serializable接口,如果没有显式的定义serialVersionUID变量的时候,java序列化机制会根据编译的Class自动生成一个serialVersionUID当作序列化版本使用,这种情况下,如果Class文件(类名、方法名等)没有发生变化(增加空格、换行、增加注释等等),就算编译再多次,serialVersionUID也不会变化的。

 

你可能感兴趣的:(java)