Java之transient關鍵字

在LinkedHashMap 類中,看到有個關鍵字transient,它是什麼意思呢?

 

下面援引百度百科解釋:
Java的serialization提供了一種持久化對象實例的機制。當持久化對象時,可能有一個特殊的對象數據成員,我們不想用serialization機制來保存它。爲了在一個特定對象的一個域上關閉serialization,可以在這個域前加上關鍵字transient。當一個對象被序列化的時候,transient型變量的值不包括在序列化的表示中,然而非transient型的變量是被包括進去的。囉嗦了那麼多,其實就一句話:

結論:將不需要序列化的屬性前添加關鍵字transient,序列化對象的時候,這個屬性就不會被序列化。

 

被靜態變量 和 transient 修飾的變量能被序列化嗎?

也許我們會好奇以下變量能否被序列化呢?答案:不能。

  • static String psw,不能被序列化
  • static transient String psw,不能被序列化

因爲靜態變量通常存儲在進程的全局區,虛擬機會根據static 關鍵字,去全局區尋找。
而序列化後的內容是保存在磁盤文件,自然就無法找到了。

 

應用場景

那在實際開發中,有什麼業務場景適用呢?舉個比較常見的例子:以個人爲中心的賬戶系統,一般會在內存緩存了一些敏感信息,如登錄密碼、token令牌等,我們不應該通過序列化把它們保存到本地,否則會造成敏感信息泄露。因此這些屬性用transient修飾,最合適不過了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章