首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java中的serialVersionUID是什么,通常在exception类中?

java中的serialVersionUID是什么,通常在exception类中?
EN

Stack Overflow用户
提问于 2011-08-25 16:33:27
回答 3查看 35.7K关注 0票数 33

可能重复:

Why should I bother about serialVersionUID?

我正在处理一些异常处理代码,我看到了一个名为serialVersionUID的代码。这个uid是用来做什么的??它是仅限于异常还是可以在所有类中使用?这个id的优点是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-25 16:45:34

serialVersionUID是用于定义特定类的版本的字段,而seriializing & deseriializing..考虑这样一个场景,您有一个类Employee,它有3个字段已经投入生产一段时间了(这意味着可能存在许多序列化版本的employee对象),当您更新该类以包含(比方说第四个字段)时,所有以前的类(序列化的)都不能被强制转换或反序列化为新的类&您将得到一个异常。

为了避免这个问题,您可以使用serialVersionUID字段来告诉JVM新类实际上是一个不同的版本(通过更改serialVersionUID)。

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

票数 41
EN

Stack Overflow用户

发布于 2011-08-25 16:37:51

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

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

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

票数 7
EN

Stack Overflow用户

发布于 2011-08-25 16:38:11

这是为了确定它们是否具有可序列化和可反序列化的兼容性,如果它们具有相同的serialVersionUID,并且都实现了Serializable,则它们是兼容的。

而且它并不仅限于异常,正如您将注意到的那样,如果eclipse实现了Serializable,那么它很容易将serialVersionUID放在普通java类的前面。

已编辑:已更新,以包含@Spychos对Serializable接口的正确评论。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7187302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档