《阿里巴巴Java開發(fā)手冊》中有以下規(guī)定:
java.io.Serializable是標(biāo)記接口(里面是空的)礁叔,未實現(xiàn)此接口的類將無法進行序列化或反序列化±ケ樱可序列化類的所有子類型本身都是可序列化的扎阶。
transient 關(guān)鍵字的作用是控制變量的序列化,在變量聲明前加上該關(guān)鍵字蜓洪,可以阻止該變量被序列化到文件中,在被反序列化后坯苹,transient 變量的值被設(shè)為初始值隆檀,如 int 型的是 0,對象型的是 null粹湃。
虛擬機是否允許反序列化恐仑,不僅取決于類路徑和功能代碼是否一致,一個非常重要的一點是兩個類的序列化 ID 是否一致为鳄,這個所謂的序列化ID裳仆,就是我們在代碼中定義的serialVersionUID。
場景1:A類有serialVersionUID孤钦,序列化之后歧斟,改動serialVersionUID,反序列化出錯偏形。
場景2:A類有serialVersionUID静袖,序列化之后,增加或改動字段俊扭,反序列化成功队橙。
場景3:A類無serialVersionUID,序列化之后萨惑,增加或改動字段捐康,反序列化失敗。
場景4:A類無serialVersionUID咒钟,序列化之后吹由,反序列化成功。