你百度一下java序列化就知道了。
这个就是序列化用到的。让实现了这个抽象方法的类,在序列化时区别于其他的类,特别是不同包同名的类。
1.在分布式系统中,此时需要把对象在网络上传输,就得把对象数据转换为二进制形式,需要共享的数据的 JavaBean 对象,都得做序列化。
2.服务器钝化:如果服务器发现某些对象好久没活动了,那么服务器就会把这些内存中的对象持久化在本地磁盘文件中(Java对象转换为二进制文件);如果服务器发现某些对象需要活动时,先去内存中寻找,找不到再去磁盘文件中反序列化我们的对象数据,恢复成 Java 对象。这样能节省服务器内存。
https://www.cnblogs.com/duanxz/p/3511695.html,网上找的,希望能帮到你
因为你实现了 java.io.Serializable 接口, 该接口需要一个serialVersionUID。 这个是序列化版本编号, 在整个项目中具有唯一性。
在Interface Serializable中, 提到
对应的中文
序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。可序列化类可以通过声明名为 "serialVersionUID" 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值,如“Java(TM) 对象序列化规范”中所述。不过, 强烈建议 所有可序列化类都显式声明 serialVersionUID 值,原因是计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的 InvalidClassException。因此,为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 private 修饰符显示声明 serialVersionUID(如果可能),原因是这种声明仅应用于直接声明类 -- serialVersionUID 字段作为继承成员没有用处。数组类不能声明一个明确的 serialVersionUID,因此它们总是具有默认的计算值,但是数组类没有匹配 serialVersionUID 值的要求。
也就是说, 只有有了这个 serialVersionUID(如果我们没有显示的声明, 则会通过类的组成来计算得到, 但是这样就会很敏感, 因为如果你的类有一点点变化, 都会导致该值发生变化), 我们才可以进行序列化和反序列化。 在进行反序列化时, 会使用该 serialVersionUID 来查找相应的类。 找不到就无法进行, 会报错。
其实编写序列化的类需要有些讲究的, 在此就不展开了
为什么大家看到好的答案都不点赞呢?