Java transient關(guān)鍵字原理解析
這篇文章主要介紹了Java transient關(guān)鍵字原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
Java 中的 transient 關(guān)鍵字被用來表示變量將不被序列化處理。那么在理解 transient 關(guān)鍵字之前,我們先了解下什么是序列化。
什么是序列化
序列化是對象進行持久化處理,也就是說,將對象轉(zhuǎn)化成一個字節(jié)流進行存儲(比如存儲為一個字節(jié)文件)或傳輸(通過網(wǎng)絡(luò)傳輸字節(jié))。同時,我們也可以從字節(jié)中反序列化一個對象出來。這是Java程序中一個重要的概念,因為網(wǎng)絡(luò)應(yīng)用中通常需要將對象序列化成字節(jié)傳輸。每一個需要序列化的對象,都要實現(xiàn) Serializable 接口。
transient關(guān)鍵字
默認情況下,對象所有的變量都會轉(zhuǎn)變成持久狀態(tài)。但是有時候,一些變量可能不需要序列化,因為沒必要對這些變量進行序列化。這時,你就可以將這些變量申明為 transient。如果一個變量被申明為 transient,那么這個變量就不會被序列化。
通過下面這個例子應(yīng)該能夠解釋 transient 關(guān)鍵字的作用:
public class NameStore implements Serializable { private String firstName; private transient String middleName; private String lastName; public NameStore (String fName, String mName, String lName){ this.firstName = fName; this.middleName = mName; this.lastName = lName; } @Override public String toString() { return "NameStore{" + "firstName='" + firstName + '\'' + ", middleName='" + middleName + '\'' + ", lastName='" + lastName + '\'' + '}'; } } public class TransientExample { public static void main(String[] args) throws Exception { NameStore nameStore = new NameStore("Steve", "Middle","Jobs"); ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("nameStore")); // writing to object o.writeObject(nameStore); o.close(); // reading from object ObjectInputStream in = new ObjectInputStream(new FileInputStream("nameStore")); NameStore nameStore1 = (NameStore)in.readObject(); System.out.println(nameStore1); } }
上面例子的輸出:
NameStore{firstName='Steve', middleName='null', lastName='Jobs'}
middleName 變量被申明為 transient,因此沒有被序列化.
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot統(tǒng)一響應(yīng)格式及統(tǒng)一異常處理
在我們開發(fā)SpringBoot后端服務(wù)時,一般需要給前端統(tǒng)一響應(yīng)格式,本文主要介紹了SpringBoot統(tǒng)一響應(yīng)格式及統(tǒng)一異常處理2023-05-05springboot中如何通過cors協(xié)議解決跨域問題
這篇文章主要介紹了springboot中通過cors協(xié)議解決跨域問題,cors是一個w3c標(biāo)準(zhǔn),它允許瀏覽器(目前ie8以下還不能被支持)像我們不同源的服務(wù)器發(fā)出xmlHttpRequest請求,我們可以繼續(xù)使用ajax進行請求訪問。具體內(nèi)容詳情大家跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05基于Spring Data Jest的Elasticsearch數(shù)據(jù)統(tǒng)計示例
本篇文章主要介紹了基于Spring Data Jest的Elasticsearch數(shù)據(jù)統(tǒng)計示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02SpringBoot整合XxlJob分布式任務(wù)調(diào)度平臺
xxl-job是一個開源的分布式定時任務(wù)框架,它可以與其他微服務(wù)組件一起構(gòu)成微服務(wù)集群。它的調(diào)度中心(xxl-job)和執(zhí)行器(自己的springboot項目中有@XxlJob("定時任務(wù)名稱")的方法)是相互分離,分開部署的,兩者通過HTTP協(xié)議進行通信2023-02-02