34

可能重复:
我为什么要关心serialVersionUID?

我正在浏览一些异常处理代码,我看到了一些名为 serialVersionUID 的东西。这个uid是干什么用的??是只限例外还是全班都可以用???这个id有什么好处???

4

3 回答 3

42

serialVersionUID是一个定义特定类版本的字段,而seriializing& deseriializing.. 考虑一个场景,当您有一个Employee具有 3 个字段的类已经投入生产一段时间(意味着可能存在许多员工对象的序列化版本)时更新类以包含(例如第 4 个字段),然后所有以前的类(已序列化)都不能转换或反序列化为新的类,您将得到一个异常。

为避免此问题,您可以使用该serialVersionUID字段来判断JVM新类实际上是不同的版本(通过更改serialVersionUID)。

@Farmor&@Tom Jefferys说的差不多,但举个例子,事情看起来要简单得多。

于 2011-08-25T08:45:33.963 回答
7

它用于序列化,它应该在任何实现的类中声明Serializable

它实际上是 JVM 可以用来检查序列化类是否与您尝试将其反序列化成的类定义匹配的版本号。

这里有更多信息:http: //download.oracle.com/javase/1,5.0/docs/api/java/io/Serializable.html

于 2011-08-25T08:37:50.750 回答
3

确定它们是否具有可序列化和可反序列化的兼容性,如果它们具有相同serialVersionUID的实现,Serializable那么它们是兼容的。

而且它不仅限于异常,因为您会注意到 eclipseserialVersionUID如果实现了Serializable.

已编辑:更新以包括@Spychos 关于Serializable界面的正确评论。

于 2011-08-25T08:38:11.290 回答