1. 程式人生 > >影響序列化的兩個關鍵字:transient 和 static

影響序列化的兩個關鍵字:transient 和 static

transient:這個關鍵字的作用就是忽略序列化操作,也就是說,當物件中的某個屬性被加上了這個關鍵字後,這個屬性就不會被序列化。這個就不在給出程式碼了,自己可以去嘗試一下,int型別的變數被加上這個關鍵字後,你反序列化得到的結果是0,String的話得到的是null。這個就不過多的解釋了。

static:靜態,這個要重點說說。靜態的變數不屬於物件,而是所有類共享的。所以,static變數也不能被序列化。好了,可以去嘗試一下了,試著把前面的Student的一個屬性變成靜態的,然後執行一遍,你會發現,並沒有被序列化。奇怪,怎麼會這樣呢?肯定又騙我了。因為編譯器是肯定不會騙我的,哈哈。老夫怎麼會騙你們呢?對吧。這裡說的序列化是指序列化資訊中不包含靜態成員域。為什麼上面這個可以測試成功呢?因為你是在同一個虛擬機器裡面,也就是在同一個程序裡面,這個靜態的域事先已經被載入進去了,所以是可以正常獲取的,沒錯,就是這道理。那該怎麼測試呢?很簡單,你就新建一個測試類,把上面那個例子中的反序列化方法copy到另一個測試類中,先第一個類中執行一下序列化方法,然後再另一個測試類中執行一個反序列化方法你就會發現,反序列化出來的結果中,static的靜態域是沒有被序列化的。(或者你在執行完序列化方法後把eclipse關掉,然後開啟後執行反序列化方法也可以。)