可能重複:
Why should I bother about serialVersionUID?什麼是java中的serialVersionUID,通常在異常類中?
我會通過一些異常處理代碼,我看到名爲serialVersionUID的東西。這個uid是什麼?它僅限於例外還是可以在所有類中使用?這個ID的優點是什麼?
可能重複:
Why should I bother about serialVersionUID?什麼是java中的serialVersionUID,通常在異常類中?
我會通過一些異常處理代碼,我看到名爲serialVersionUID的東西。這個uid是什麼?它僅限於例外還是可以在所有類中使用?這個ID的優點是什麼?
的serialVersionUID是一個字段定義特定類的版本,而seriializing & deseriializing ..考慮,你有一個類Employee
其中有3場以來一直在生產了一段時間的場景(這意味着有可能存在許多連載版本的員工對象),當你更新類包含(比如說第4個字段),那麼所有以前的類(它們都是序列化的)不能被鑄造或反序列化到新的&,你會得到一個例外..
爲了避免這個問題,可以使用serialVersionUID
字段告訴JVM新類實際上是不同版本的(通過更改serialVersionUID)。
@Farmor & @湯姆傑弗里斯說了幾乎相同的事情,但有一個例子,事情看起來很簡單。
很好解釋。示例中爲+1。 –
它用於序列化,它應該在任何實現Serializable
的類中聲明。
它實際上是JVM可用於檢查序列化類是否與要將其反序列化的類定義匹配的版本號。
這裏有一個關於它的更多信息:http://download.oracle.com/javase/1,5.0/docs/api/java/io/Serializable.html
它以確定他們是否有序列化和deserializable兼容性,如果他們有相同的serialVersionUID
和兩個工具Serializable
那麼他們是兼容的。
它並不僅限於例外情況,因爲您會注意到如果實現了Serializable
,eclipse很容易在早期的普通Java類中放置serialVersionUID
。
已修改:已更新爲包含有關Serializable
界面的@Spychos正確評論。
這不是嚴格正確的。如果一個對象或它的一個超類實現了可序列化,則這個對象是可序列化的。 – Spycho
請參閱這裏:http://stackoverflow.com/questions/285793/why-should-i-bother-about-serialversionuid –
這是一個很好的,制定良好的問題恕我直言,但它已被回答(主要)在上面的鏈接中。至於是否僅限於'Exception',答案是否定的,它可以用於任何類。 –
在例外我們沒有可序列化...那麼爲什麼它有? – amod