Java中的瞬態關鍵字:它是什麼以及它是如何工作的?

已發表: 2022-03-06

與所有其他編程語言一樣,Java 編程語言有一個具有特定含義的保留字列表。 Java 保留的這組 52 個字稱為關鍵字。 由於它們具有預定義的含義,因此程序員不能使用關鍵字來命名它們的類、對象、變量和其他標識符。 這 52 個關鍵字中的一個是瞬態關鍵字——這將是我們博客的重點!

目錄

理解Java中的transient關鍵字

Transient 是 Java 編程語言中比較有用的修飾符之一。 瞬態關鍵字的主要作用是在序列化的情況下。 瞬態修飾符可應用於類的字段成員以關閉這些特定成員的序列化。

簡單來說,Java中的transient關鍵字可以被程序員用來避免序列化。 如果任何數據結構的任何特定對像已被程序員定義為瞬態,它將不會被序列化。 因此,您可以使用瞬態關鍵字向 JVM(Java 虛擬機)表明您的瞬態變量不會成為對象的任何持久狀態的一部分。

讓我們嘗試使用一個非常基本的示例來了解 Java 中瞬態關鍵字的工作原理。 首先,我們將創建一個 Address 類並為該類定義三個屬性——streetName、areaName 和 houseNumber。 我們將保持它是暫時的,因為我們不想存儲或保存第三個屬性——houseNumber。

類地址實現可序列化

{

私人字符串街道名稱;

私有字符串區域名稱;

私有瞬態字符串 houseNumber;

//Setter 和 Getter

}

現在讓我們序列化 Address 類的一個實例。

試試{

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“addressinfo.ser”));

地址 a = new Address();

a.setstreetName(“MIG”);

a.setareaName(“Vikas Nagar”);

emp.sethouseNumber(“110”);

//序列化對象

oos.writeObject(a);

oos.close();

} 捕捉(異常 e)

{

System.out.println(e);

}

如果我們的代碼正常工作,則不會保存“houseNumber”信息,因為我們將其定義為瞬態。 現在,我們將嘗試將其反序列化回原始對象,並查看信息是否已保存。

試試{

ObjectInputStream o = new ObjectInputStream(new FileInputStream(“addressinfo.ser”));

//讀回對象

地址 readAddressInfo = (Address) o.readObject();

System.out.println(readAddressInfo.getstreetName());

System.out.println(readAddressInfo.getareaName());

System.out.println(readAddressInfo.gethouseNumber());

o.close();

} 捕捉(異常 e)

{

System.out.println(e);

}

如果您運行上述 Java 程序,您將收到以下輸出:

米格

維卡斯納加爾

空值

如您所見,由於序列化,“houseNumber”信息沒有保存到永久狀態,這就是我們接收值“null”作為輸出的原因。 這正是使用瞬態關鍵字的原因——以一種非永久的但瞬態的方式將值存儲到變量中。

Java中'transient'關鍵字的用例

現在您了解了瞬態關鍵字及其作用,接下來出現的邏輯問題是——我們什麼時候使用瞬態關鍵字?

讓我們通過深入研究您將從使用瞬態關鍵字中受益的一些情況來擴展我們對瞬態關鍵字的了解。

以下是一些常見的用例供您牢記:

  • 瞬態關鍵字的第一個用例是在您可能具有從類實例中的某些其他字段計算或派生的數據字段的情況下。 因此,這些字段需要以編程方式計算,並且它們依賴於其他值。 這就是為什麼不讓這些字段持久化,而是可以使用瞬態關鍵字對它們進行非序列化。 從其他數字計算的此類瞬態值的示例可能包括基於時間戳的值、基於百分比的值等。在所有這些情況下,您正在根據當前存在的值計算變量的值。
  • 另一個重要的用例可能是,當您使用任何類型的安全信息時,這些信息在任何情況下都不應該洩漏到 JVM 之外,然後可以使用瞬態關鍵字對其進行非序列化。
  • Java 開發工具包中未標記為“可序列化”的字段可以與瞬態關鍵字一起使用。 這裡要注意的重要一點是,所有沒有實現可序列化接口的 Java 類都不能被序列化,因為它們沒有在任何可序列化類中引用。 因此,如果在序列化主類之前沒有標記為“transient”,這些可能會拋出“java.io.NotSerializableException”。
  • 最後,在某些情況下序列化某些字段沒有意義。 例如,如果您在代碼中添加了記錄器引用,您就不想序列化該信息。 您應該序列化表示實例狀態的信息。 另一方面,記錄器不代表任何狀態,因此序列化它們沒有用處。 因此,它們應該與瞬態關鍵字一起使用。

綜上所述

上面討論的用例絕不是詳盡的。 嘗試使用 transient 關鍵字並提出您自己的用例。 畢竟,關鍵字是為程序員設計的,只有當您知道它們的功能和含義時,您才能製作大部分關鍵字。

至此,我們結束了這篇關於 Java 中的瞬態關鍵字的博客。 這是為了在您的軟件開發職業生涯中成長而必須掌握的更具介紹性的概念之一。 軟件開發領域非常活躍,但如果您準備好全力以赴並儘最大努力,那麼您將非常歡迎!

在 upGrad,我們指導和指導了來自世界各地的學生,他們屬於不同的領域,並幫助他們開始了他們的軟件開發職業生涯。 我們的軟件開發 PGP – 全棧開發專業專為新手和經驗豐富的專業人士而設計。 除了專家導師和最先進的學習材料外,您還可以獲得才華橫溢的同行、全面的就業支持以及與行業領導者的一對一指導。 因此,請查看課程內容並儘快註冊!

1、Java中的transient關鍵字是什麼?

Java 中的瞬態關鍵字可用於避免對象的序列化。 使用瞬態關鍵字,您可以確保特定字段持有的值不會持久。

2.Java中哪些元素可以使用transient關鍵字?

您可以在 Java 中使用瞬態關鍵字對類、變量、對像或字段進行非序列化。

3. Java中的transient關鍵字和volatile關鍵字有什麼區別?

瞬態關鍵字用於避免序列化過程,而 volatile 關鍵字與變量一起使用,因此它不會存儲在主存儲器中。