serialVersionUID的是最后的静态和私有变量,
该变量的值将被JVM 产生 和用于序列化和对象的反序列化。
序列化运行联营每个序列化类版本号,被称为的serialVersionUID,这是反序列化过程中用于验证序列化对象的发送者和接收者加载类是关于序列化兼容的对象。如果接收器已经装载一个类具有不同的serialVersionUID比相应的发送者的类的对象,然后反序列化将导致InvalidClassException。可序列化类可以通过声明名为“serialVersionUID的”必须是静态的,最后一个字段显式声明long类型自身的serialVersionUID,和。
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
ANY-访问修饰符静态最后长的serialVersionUID = 42L;
如果一个序列化类没有显式声明的serialVersionUID,则序列化运行时将计算默认的serialVersionUID值基于类的各个方面的类,如在Java(TM)中描述的对象序列化规范。然而,强烈建议所有可序列化类中明确声明的serialVersionUID值,因为默认的serialVersionUID的计算是类细节取决于编译器实现,可能会发生变化高度敏感,并因此可能导致反序列化过程中意外InvalidClassExceptions。因此,为了保证不同java编译器实现了一致的serialVersionUID值,序列化类必须声明一个明确的serialVersionUID值。它也强烈建议明确的serialVersionUID声明使用私有修饰符在可能的情况,因为这样的声明仅适用于立即声明类 - 的serialVersionUID字段不作为继承的成员是有用的。
其实序列化的作用是能转化成Byte流,然后又能反序列化成原始的类。能在网络进行传输,也可以保存在磁盘中,有了SUID之后,那么如果序列化的类已经保存了在本地中,中途你更改了类后,SUID变了,那么反序列化的时候就不会变成原始的类了,还会抛异常,主要就是用于版本控制。