serialVersionUID的是最后的靜態和私有變量,
該變量的值將被JVM 產生 和用於序列化和對象的反序列化。
序列化運行聯營每個序列化類版本號,被稱為的serialVersionUID,這是反序列化過程中用於驗證序列化對象的發送者和接收者加載類是關於序列化兼容的對象。如果接收器已經裝載一個類具有不同的serialVersionUID比相應的發送者的類的對象,然后反序列化將導致InvalidClassException。可序列化類可以通過聲明名為“serialVersionUID的”必須是靜態的,最后一個字段顯式聲明long類型自身的serialVersionUID,和。
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
ANY-訪問修飾符靜態最后長的serialVersionUID = 42L;
如果一個序列化類沒有顯式聲明的serialVersionUID,則序列化運行時將計算默認的serialVersionUID值基於類的各個方面的類,如在Java(TM)中描述的對象序列化規范。然而,強烈建議所有可序列化類中明確聲明的serialVersionUID值,因為默認的serialVersionUID的計算是類細節取決於編譯器實現,可能會發生變化高度敏感,並因此可能導致反序列化過程中意外InvalidClassExceptions。因此,為了保證不同java編譯器實現了一致的serialVersionUID值,序列化類必須聲明一個明確的serialVersionUID值。它也強烈建議明確的serialVersionUID聲明使用私有修飾符在可能的情況,因為這樣的聲明僅適用於立即聲明類 - 的serialVersionUID字段不作為繼承的成員是有用的。
其實序列化的作用是能轉化成Byte流,然后又能反序列化成原始的類。能在網絡進行傳輸,也可以保存在磁盤中,有了SUID之后,那么如果序列化的類已經保存了在本地中,中途你更改了類后,SUID變了,那么反序列化的時候就不會變成原始的類了,還會拋異常,主要就是用於版本控制。