我正在浏览一些异常处理代码,我看到了一些名为serialVersionUID的东西。这个uid用于什么?是否仅限于例外或可以在所有类中使用???这个id的优点是什么?
答案 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正确评论。