欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

被遺忘的Java關鍵字transient的使用詳解

 更新時間:2023年04月26日 10:04:27   作者:不一樣的科技宅  
在 Java 中,transient 是一個關鍵字,用于指定一個類的字段(成員變量)在序列化時應該被忽略。本文將通過示例為大家簡單講講transient的使用,需要的可以參考一下

前言

今天在看項目代碼時候,看到了下面這樣一行代碼,用transient修飾了一個變量,主要作用是做一個全局開關。說實話我是第一次看到這個關鍵字。激發(fā)了我的好奇心,所以就了解一下這是何方神圣。

/**
     * 全局開關
     */
    public static transient boolean running = true;

transient 是什么

在 Java 中,transient 是一個關鍵字,用于指定一個類的字段(成員變量)在序列化時應該被忽略。在 Java 對象序列化期間,對象的狀態(tài)被轉換為字節(jié)流,以便在網絡上傳輸或持久保存到磁盤。如果一個字段被標記為 transient,那么它的值不會被序列化,在反序列化時會被恢復其默認值。

簡單示例

public class Example implements Serializable {
    private String name;
    private transient int age;

    public Example(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String toString() {
        return "Example{name='" + name + "', age=" + age + "}";
    }

    public static void main(String[] args) throws Exception {
        String dir = "/Users/ryan/Desktop/";

        // 創(chuàng)建一個Example對象并序列化到文件
        Example obj = new Example("Ryan", 20);

        System.out.println("Before serialization: " + obj);
        OutputStream outputStream = Files.newOutputStream(Paths.get(dir + "example.ser"));
        try (ObjectOutputStream out = new ObjectOutputStream(outputStream)) {
            out.writeObject(obj);
        }

        // 從文件中反序列化Example對象
        InputStream inputStream = Files.newInputStream(Paths.get(dir + "example.ser"));
        try (ObjectInputStream in = new ObjectInputStream(inputStream)) {
            System.out.println("After deserialization: " + in.readObject());
        }
    }
}

執(zhí)行結果:

Before serialization: Example{name='Ryan', age=20}
After deserialization: Example{name='Ryan', age=0}

在上述示例中,我們創(chuàng)建了一個名為 Example 的類,并在其中定義了兩個字段 name 和 age,其中 age 被標記為 transient。然后,我們創(chuàng)建了一個 Example 對象并將其序列化到名為 example.ser 的文件中。

接著,我們從文件中反序列化了剛剛序列化的 Example 對象,并將其賦值給一個新的對象 newObj。然后,我們打印出了原始對象和反序列化后的對象??梢钥吹?,在反序列化后,age 字段的值被恢復為其默認值 0。

使用場景

序列化敏感數據

有些對象包含一些敏感信息,如密碼、訪問令牌等,這些信息在對象序列化時需要被保護,以防被未授權的用戶訪問和泄露。

提高序列化性能

有些對象中的字段可能會影響序列化和反序列化的性能,如包含大量數據的對象,這些數據可能會在網絡傳輸或磁盤存儲期間增加延遲和負載,使用 transient 關鍵字可以排除這些字段,提高序列化性能。

臨時數據

有些字段僅用于對象的內部計算或臨時存儲數據,這些數據在序列化時無需保留,因此可以使用 transient 關鍵字來忽略這些字段,從而減少序列化后對象的大小。

需要注意的點

  • transient關鍵字只能修飾變量,而不能修飾方法和類。
  • transient標記的變量所在的類必須實現Serializable接口。
  • transient標記的變量在反序列化時會被初始化為默認值,需要在程序中手動進行初始化操作。

總結

transient 關鍵字只是暫時地在序列化過程中忽略了該字段,而不是永久性地從對象中刪除該字段。在反序列化時,該字段將被恢復為其默認值。因此,如果需要永久地從對象中刪除一個字段,直接將其從類中完全刪除。

應該很少有人,會在項目中使用這個關鍵字吧,所以它值得被遺忘

到此這篇關于被遺忘的Java關鍵字transient的使用詳解的文章就介紹到這了,更多相關Java關鍵字transient內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中關于優(yōu)先隊列PriorityQueue的使用及相關方法

    Java中關于優(yōu)先隊列PriorityQueue的使用及相關方法

    這篇文章主要介紹了Java中關于優(yōu)先隊列PriorityQueue的使用及相關方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 通過Java實現添加或刪除PDF中的附件

    通過Java實現添加或刪除PDF中的附件

    當我們在制作PDF文件或者PPT演示文稿的時候,為了讓自己的文件更全面詳細,就會在文件中添加附件。本文為大家整理了Java實現添加或刪除PDF中的附件的方法,需要的可以參考下
    2023-01-01
  • Dwr3.0純注解(純Java Code配置)配置與應用淺析一之零配置文件化

    Dwr3.0純注解(純Java Code配置)配置與應用淺析一之零配置文件化

    Dwr對我來說最重要的功能點就是反向Ajax調用,通俗來將就是后端可以直接調用前端的JS方法(只要在所能訪問的范圍內),這也就是Dwr的真正來由,當然它也有最基本的前端直接調用后端的特性,省去了我們經常的一般Ajax調用
    2016-04-04
  • java建立子類方法總結

    java建立子類方法總結

    在本篇文章里小編給大家分享了關于java建子類的步驟和方法,需要的朋友們跟著學習下。
    2019-05-05
  • MyBatis saveBatch 性能調優(yōu)的實現

    MyBatis saveBatch 性能調優(yōu)的實現

    本文主要介紹了MyBatis saveBatch 性能調優(yōu)的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Dwr3.0純注解(純Java Code配置)配置與應用淺析二之前端調用后端

    Dwr3.0純注解(純Java Code配置)配置與應用淺析二之前端調用后端

    我們講到了后端純Java Code的Dwr3配置,完全去掉了dwr.xml配置文件,但是對于使用注解的類卻沒有使用包掃描,而是在Servlet初始化參數的classes里面加入了我們的Service組件的聲明暴露,對于這個問題需要后面我們再細細研究下這篇文章,主要分析介紹前端怎么直接調用后端
    2016-04-04
  • Java多線程中Lock鎖的使用小結

    Java多線程中Lock鎖的使用小結

    這篇文章主要介紹了Java多線程中Lock鎖的使用小結,本節(jié)主要講了它的基本使用,大家可以舉一反三,試試什么條件下會導致死鎖,需要的朋友可以參考下
    2022-06-06
  • java map中相同的key保存多個value值方式

    java map中相同的key保存多個value值方式

    這篇文章主要介紹了java map中相同的key保存多個value值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java簡單實現八叉樹圖像處理代碼示例

    java簡單實現八叉樹圖像處理代碼示例

    這篇文章主要介紹了java簡單實現八叉樹圖像處理代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Springboot返回的json屏蔽某些屬性的操作

    Springboot返回的json屏蔽某些屬性的操作

    這篇文章主要介紹了Springboot返回的json屏蔽某些屬性的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論