什么是java serialVersionUID以及它的作用

一、概述

当serialVersionUID缺少时,Eclipse发出警告

可序列化的类Foo没有声明类型为long的static final serialVersionUID字段

serialVersionUID是什么,为什么重要?请展示一个示例,其中缺失serialVersionUID会导致问题。

 

二、详解

java.io.Serializable的文档大概会为您提供一个很好的解释:

序列化运行时与每个可序列化的类关联一个版本号,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送者和接收者是否已加载了该对象的与序列化兼容的类。如果接收者为对象加载的类serialVersionUID与相应的发送者的类不同,则反序列化将导致 InvalidClassException可序列化的类可以serialVersionUID通过声明一个serialVersionUID必须为static,final和type的字段来显式声明其自身long

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

如果可序列化的类未显式声明a serialVersionUID,则序列化运行时将根据serialVersionUID该类的各个方面为该类计算默认值,如Java™对象序列化规范中所述。但是,强烈建议所有可序列化的类显式声明serialVersionUID值,因为默认serialVersionUID计算对类详细信息高度敏感,而类详细信息可能会根据编译器的实现而有所不同,因此可能在InvalidClassExceptions反序列化期间导致意外情况。因此,为了保证serialVersionUID不同Java编译器实现之间的值一致,可序列化的类必须声明一个显式serialVersionUID值。还强烈建议明确serialVersionUID声明尽可能使用private修饰符,因为此类声明仅适用于立即声明的类serialVersionUID字段,不能用作继承成员。

如若转载,请注明出处:https://www.javaidea.cn/article/8222.html

(0)
上一篇 2022年2月7日 上午10:03
下一篇 2022年2月7日 上午10:03

相关推荐

发表评论

您的电子邮箱地址不会被公开。