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

时间:2011-08-25 08:33:27

标签: java serialization serialversionuid

  

可能重复:
  Why should I bother about serialVersionUID?

我正在浏览一些异常处理代码,我看到了一些名为serialVersionUID的东西。这个uid用于什么?是否仅限于例外或可以在所有类中使用???这个id的优点是什么?

3 个答案:

答案 0 :(得分:30)

serialVersionUID是一个定义特定类版本的字段seriializing& deseriializing ..考虑一个场景,你有一个类Employee有3个字段已经生产了一段时间(意味着可能存在许多员工对象的序列化版本),当你更新类时包括(比如第4个字段)然后所有前一个类(被序列化的)都不能被转换或反序列化为新的类和&你会得到一个例外。

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

@Farmor& @Tom Jefferys几乎说了同样的话,但举个例子看起来简单得多。

答案 1 :(得分:6)

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

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

此处有更多相关信息:http://download.oracle.com/javase/1,5.0/docs/api/java/io/Serializable.html

答案 2 :(得分:2)

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

并不仅限于异常,因为你会发现eclipse很容易在你的普通java类中提前serialVersionUID实现Serializable

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