What is serialVersionUID in java, normally in exception class?
Possible Duplicate:
Why should I bother about serialVersionUID?
我正在研究一些异常处理代码,我看到了名为serialversionuid的东西。这是用来干什么的??是否仅限于例外情况,或可用于所有类别????这个身份证有什么好处????
- 请参见:stackoverflow.com/questions/285793/…
- 这是一个很好的,很有条理的问题imho,但它已经在上面的链接中得到了回答(大部分)。至于是否只限于Exception,答案是否定的,可以在任何类别中使用。
- 除非我们没有可序列化的…那为什么呢????
- @amod017java.lang.exception实现可序列化,因此任何子类也将实现可序列化。
- 谢谢汤姆提供的信息。
serialVersionUID是一个字段,用于定义特定类的版本,而seriializing和deseriializing则是一个字段。考虑一个场景,您有一个类Employee,它有3个已经生产一段时间的字段(意味着可能存在许多员工对象的序列化版本),当您更新该类以包含(例如第4个字段)时,之前的所有类(序列化的)都不能强制转换或反序列化为新的类&am你会得到一个例外。
为了避免这个问题,您可以使用serialVersionUID字段告诉JVM,新类实际上是不同的版本(通过更改serialVersionUID)。
@Farmor和@Tom Jefferys说的差不多,但举个例子来说,事情看起来简单多了。
它用于序列化,应该在实现Serializable的任何类中声明。
它实际上是一个版本号,JVM可以用来检查序列化类是否与您试图将其反序列化到的类定义匹配。
这里有更多关于它的信息:http://download.oracle.com/javase/1,5.0/docs/api/java/io/serializable.html
这是为了确定它们是否具有可序列化和可反序列化的兼容性,如果它们具有相同的serialVersionUID,并且都实现Serializable,那么它们是兼容的。
它并不局限于异常,只有当您注意到Eclipse在实现正常的Java类时,如果它实现EDCOX1,0,那么Eclipse很容易在EDCOX1 1中插入EDCOX1。
编辑:更新后包含@spychos对Serializable接口的正确评论。
- 这不完全正确。如果对象或其某个超类实现了可序列化,则该对象是可序列化的。