在介绍serialVersionUID的自动生成设置(非常简单,就两步,后面有),我觉得我有必要有我个人的理解去描述一下 这个
Serializable,‘序列化’是什么意思? 作用是啥? 因为我之前也没做了解,也只是跟着序列化序列化。
个人理解:
序列化, 这个东西有什么用呢。
举个例子, 暗号,大家都知道吧。 暗号的背后是有它的意义的。 (例如敲门三长两短,代表:自己人,开门吧)
那么给一个实体类序列化, 我个人认为,就是将类暗号化。
例如,我创建一个User类, 开始只有姓名、年龄这两个字段。 然后我给这个类起暗号(序列化),暗号就叫123456789L,,一旦取了暗号,我们(交流双方)都知道了暗号背后的意义。 那么我们看到暗号就等于能知道里面有姓名、年龄这两个字段。
(以上是个人庸俗的表达)
现在来说序列化类的2种情况以及一些个人测试结论,
① 仅仅在类后面 继承了Serializable(没有自己设置一个序列化号 类似
private static final long serialVersionUID = -6247771733775111242L;
)。
那么在我们正常给这个类起暗号的时候,大家都是能正确解读背后的意义的。 但是, 如果我私下把暗号背后的意义修改了,也就是在对User类起完暗号后,把User类的字段加上了身高、体重这些额外的字段。 那么。你(反序列化读取相关信息)不知道,你还保留在之前的思想,暗号是123456789L。 然后这种情况,大家的信息就不对称了,那么你就会反序列失败。
这种情况是,仅仅是继承了Serializable,序列化号是java自己帮你设置的。
②不仅在类后面 继承了Serializable,而且自己设置了序列化号。
这种情况,在类被序列化之后, 你再怎么修改内容,因为我们自己设置好了序列化号, 在反序列化的时候,会根据这个序列化号去查出对应的类的内容,这样就不会出现信息不匹配了。
所以,我推荐,给序列化,那么就继承Serializable并设置下自动生成下序列化号。
自动设置生成serialVersionUID方法如下:
(设置完后,继承下Serializable,然后按Alt+Enter 快捷键 ,add就OK)
(快捷键不一样的话,那你鼠标对着波浪线,用自己的快捷键就好)