什么是java中的serialVersionUID,通常在异常类中?
可能重复:
为什么我应该打扰serialVersionUID?
我正在通过一些异常处理代码,我看到一些名为serialVersionUID的东西。 这个uid是什么? 它仅限于例外还是可以在所有类中使用? 这个ID的优点是什么?
serialVersionUID是一个字段,用于定义特定类的版本,同时进行批量化和批量化..考虑一个场景,其中有一个Employee
类,其中有3个字段已经生产了一段时间(这意味着可能存在许多序列化版本的员工对象),当你更新类包含(比如说第4个字段),那么所有以前的类(它们都是序列化的)不能被转换或反序列化到新的类中,你将得到一个异常。
为了避免这个问题,你可以使用serialVersionUID
字段来告诉JVM新的类实际上是一个不同的版本(通过改变serialVersionUID)。
@Farmor和@Tom杰弗里斯说了几乎相同的东西,但是举个例子,事情看起来简单得多。
它用于序列化,它应该在任何实现Serializable
类中声明。
它实际上是JVM可用来检查序列化类是否与要将其反序列化的类定义相匹配的版本号。
这里有更多的信息:http://download.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html
这是为了确定它们是否具有可序列化和可反序列化的兼容性(如果它们具有相同的serialVersionUID
并且都实现了Serializable
那么它们是兼容的)。
并且它不仅限于异常,因为您会注意到如果实现Serializable
eclipse很容易在正常的java类中提早使用serialVersionUID
。
已编辑:已更新为包含有关Serializable
接口的@Spychos正确评论。
上一篇: What is serialVersionUID in java, normally in exception class?