serialVersionUID用作Serializable類中的版本控件。如果您沒有顯式聲明serialVersionUID,JVM將根據(jù)您的Serializable類的各個(gè)方面自動(dòng)為您執(zhí)行此操作,那么serialVersionUID如何生成?在程序開發(fā)的過程中經(jīng)常需要把類序列化,不過在類系列化之前需要生成一個(gè)serialVersionUID,我們可以通過三種方法得到serialVersionUID,具體過程請(qǐng)看下文。
serialVersionUID適用于java序列化機(jī)制。簡(jiǎn)單來說,JAVA序列化的機(jī)制是通過判斷類的serialVersionUID來驗(yàn)證的版本一致的。在進(jìn)行反序列化時(shí),JVM會(huì)把傳來的字節(jié)流中的serialVersionUID于本地相應(yīng)實(shí)體類的serialVersionUID進(jìn)行比較。如果相同說明是一致的,可以進(jìn)行反序列化,否則會(huì)出現(xiàn)反序列化版本一致的異常,即是InvalidCastException。
生成serialVersionUID之前需要序列化類
1、這里我用的是MyEclipse工具,先打開MyEclipse,然后點(diǎn)擊導(dǎo)航上面的【File】菜單,然后選擇New,在點(diǎn)擊Java Project,來新建個(gè)測(cè)試工程,如下圖所示。
2、新建好工程后,選中新建的工程名稱,然后點(diǎn)擊鼠標(biāo)右鍵,選擇【New】,然后在右側(cè)選擇點(diǎn)擊Class,來創(chuàng)建生成serialVersionUID的類,如下圖所示。
3、新建的類一定要實(shí)現(xiàn)Serializable這個(gè)序列化類,只有繼續(xù)這個(gè)類后,才能生成serialVersionUID。繼承后,在我們的開發(fā)工具里就會(huì)有黃色提醒,代碼如下:
public class SerialVersionUID implements Serializable {
private String name = "jingyan";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
一、生成默認(rèn)的serialVersionUID
1、在上面創(chuàng)建好繼承序列化接口的類后,我們直接點(diǎn)擊左側(cè)的黃色亮點(diǎn),然后在彈出菜單里,點(diǎn)擊【Add default serial version ID】這個(gè)選項(xiàng),就可以自動(dòng)生成serialVersionUID了,如下圖所示。
2、點(diǎn)擊后,開發(fā)工具就會(huì)給我們自動(dòng)生成了serialVersionUID。
注意:這個(gè)自動(dòng)生成后的1L是不能自己修改的。
二、生成串行serialVersionUID
1、這種方法也是直接點(diǎn)擊左側(cè)的黃色亮點(diǎn),然后在彈出菜單里,點(diǎn)擊【Add generated serial version ID】這個(gè)選項(xiàng),就可以自動(dòng)生成serialVersionUID了,如下圖所示。
2、點(diǎn)擊后,開發(fā)工具就會(huì)給我們自動(dòng)生成了一個(gè)serialVersionUID。
注意:這個(gè)自動(dòng)生成后的一竄數(shù)字是不能自己修改的。
三、注解生成serialVersionUID
這種方法也很簡(jiǎn)單,也是直接點(diǎn)擊左側(cè)的黃色亮點(diǎn),然后在彈出菜單里,點(diǎn)擊【Add @SuppressWarnings serial to serialVersionUID】這個(gè)選項(xiàng),這樣就可以了,如下圖所示。
點(diǎn)擊后,開發(fā)工具就會(huì)并沒有給我們像上面一樣生成一竄數(shù)字,而是在類名上面加了個(gè)@SuppressWarnings(“serial”)。這樣就實(shí)現(xiàn)了serialVersionUID,如下圖所示。
SUN強(qiáng)烈建議開發(fā)人員聲明serialVersionUID以避免上面列出的不同JVM問題,但我建議您應(yīng)該了解什么是序列化,serialVersionUID如何實(shí)現(xiàn)版本控制以及您的類需要使用序列化的原因。了解serialVersionUID概念優(yōu)于任何推薦的盲目。