最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

被遺忘的Java關(guān)鍵字transient的使用詳解

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

前言

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

/**
     * 全局開關(guān)
     */
    public static transient boolean running = true;

transient 是什么

在 Java 中,transient 是一個(gè)關(guān)鍵字,用于指定一個(gè)類的字段(成員變量)在序列化時(shí)應(yīng)該被忽略。在 Java 對(duì)象序列化期間,對(duì)象的狀態(tài)被轉(zhuǎn)換為字節(jié)流,以便在網(wǎng)絡(luò)上傳輸或持久保存到磁盤。如果一個(gè)字段被標(biāo)記為 transient,那么它的值不會(huì)被序列化,在反序列化時(shí)會(huì)被恢復(fù)其默認(rèn)值。

簡(jiǎn)單示例

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)建一個(gè)Example對(duì)象并序列化到文件
        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對(duì)象
        InputStream inputStream = Files.newInputStream(Paths.get(dir + "example.ser"));
        try (ObjectInputStream in = new ObjectInputStream(inputStream)) {
            System.out.println("After deserialization: " + in.readObject());
        }
    }
}

執(zhí)行結(jié)果:

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

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

接著,我們從文件中反序列化了剛剛序列化的 Example 對(duì)象,并將其賦值給一個(gè)新的對(duì)象 newObj。然后,我們打印出了原始對(duì)象和反序列化后的對(duì)象。可以看到,在反序列化后,age 字段的值被恢復(fù)為其默認(rèn)值 0。

使用場(chǎng)景

序列化敏感數(shù)據(jù)

有些對(duì)象包含一些敏感信息,如密碼、訪問(wèn)令牌等,這些信息在對(duì)象序列化時(shí)需要被保護(hù),以防被未授權(quán)的用戶訪問(wèn)和泄露。

提高序列化性能

有些對(duì)象中的字段可能會(huì)影響序列化和反序列化的性能,如包含大量數(shù)據(jù)的對(duì)象,這些數(shù)據(jù)可能會(huì)在網(wǎng)絡(luò)傳輸或磁盤存儲(chǔ)期間增加延遲和負(fù)載,使用 transient 關(guān)鍵字可以排除這些字段,提高序列化性能。

臨時(shí)數(shù)據(jù)

有些字段僅用于對(duì)象的內(nèi)部計(jì)算或臨時(shí)存儲(chǔ)數(shù)據(jù),這些數(shù)據(jù)在序列化時(shí)無(wú)需保留,因此可以使用 transient 關(guān)鍵字來(lái)忽略這些字段,從而減少序列化后對(duì)象的大小。

需要注意的點(diǎn)

  • transient關(guān)鍵字只能修飾變量,而不能修飾方法和類。
  • transient標(biāo)記的變量所在的類必須實(shí)現(xiàn)Serializable接口。
  • transient標(biāo)記的變量在反序列化時(shí)會(huì)被初始化為默認(rèn)值,需要在程序中手動(dòng)進(jìn)行初始化操作。

總結(jié)

transient 關(guān)鍵字只是暫時(shí)地在序列化過(guò)程中忽略了該字段,而不是永久性地從對(duì)象中刪除該字段。在反序列化時(shí),該字段將被恢復(fù)為其默認(rèn)值。因此,如果需要永久地從對(duì)象中刪除一個(gè)字段,直接將其從類中完全刪除。

應(yīng)該很少有人,會(huì)在項(xiàng)目中使用這個(gè)關(guān)鍵字吧,所以它值得被遺忘

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

相關(guān)文章

  • SpringBoot整合Lombok的步驟詳解

    SpringBoot整合Lombok的步驟詳解

    在Java開發(fā)中,我們經(jīng)常需要編寫大量的模板代碼,比如getter和setter方法、構(gòu)造函數(shù)、toString、equals和hashCode等,本文將詳細(xì)介紹如何在Spring Boot項(xiàng)目中整合Lombok,以及Lombok的一些常用注解,需要的朋友可以參考下
    2024-11-11
  • logback過(guò)濾部分日志輸出的操作

    logback過(guò)濾部分日志輸出的操作

    這篇文章主要介紹了logback過(guò)濾部分日志輸出的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java中的匿名內(nèi)部類總結(jié)

    java中的匿名內(nèi)部類總結(jié)

    這篇文章主要介紹了 java中的匿名內(nèi)部類總結(jié)的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • 使用Spring Cache和Redis實(shí)現(xiàn)查詢數(shù)據(jù)緩存

    使用Spring Cache和Redis實(shí)現(xiàn)查詢數(shù)據(jù)緩存

    在現(xiàn)代應(yīng)用程序中,查詢緩存的使用已經(jīng)變得越來(lái)越普遍,它不僅能夠顯著提高系統(tǒng)的性能,還能提升用戶體驗(yàn),在這篇文章中,我們將探討緩存的基本概念、重要性以及如何使用Spring Cache和Redis實(shí)現(xiàn)查詢數(shù)據(jù)緩存,需要的朋友可以參考下
    2024-07-07
  • Java中Volatile關(guān)鍵字詳解及代碼示例

    Java中Volatile關(guān)鍵字詳解及代碼示例

    這篇文章主要介紹了Java中Volatile關(guān)鍵字詳解及代碼示例,分為兩個(gè)部分,第一部分介紹了Volatile關(guān)鍵字的基本概念等內(nèi)容,第二部分分享了實(shí)例代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作

    MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作

    這篇文章主要介紹了MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Java webSerivce的使用看完你就明白了

    Java webSerivce的使用看完你就明白了

    因?yàn)榍岸螘r(shí)間,需要使用到webService來(lái)調(diào)用公司的其他系統(tǒng)api接口,但是請(qǐng)求方式和我熟知的http請(qǐng)求不一樣,是基于soap協(xié)議來(lái)傳輸xml數(shù)據(jù)格式,請(qǐng)求的參數(shù)極其復(fù)雜,需要封裝多層xml數(shù)據(jù)格式,并且我不知道對(duì)方的api接口是什么語(yǔ)言,甚至不知道他們存在于什么平臺(tái)
    2022-03-03
  • java實(shí)現(xiàn)上傳文件類型檢測(cè)過(guò)程解析

    java實(shí)現(xiàn)上傳文件類型檢測(cè)過(guò)程解析

    這篇文章主要介紹了java實(shí)現(xiàn)上傳文件類型檢測(cè)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java設(shè)計(jì)模式之原型設(shè)計(jì)示例詳解

    Java設(shè)計(jì)模式之原型設(shè)計(jì)示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java的原型設(shè)計(jì)模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • SpringCloud中的OpenFeign調(diào)用解讀

    SpringCloud中的OpenFeign調(diào)用解讀

    OpenFeign是一個(gè)顯示聲明式的WebService客戶端,使用OpenFeign能讓編寫Web Service客戶端更加簡(jiǎn)單OpenFeign的設(shè)計(jì)宗旨式簡(jiǎn)化Java Http客戶端的開發(fā),本文給大家介紹SpringCloud之OpenFeign調(diào)用解讀,感興趣的朋友一起看看吧
    2023-11-11

最新評(píng)論

白水县| 准格尔旗| 阿拉善右旗| 永定县| 新平| 合阳县| 穆棱市| 错那县| 壶关县| 沈丘县| 万盛区| 阿克陶县| 岳阳县| 股票| 客服| 古田县| 建湖县| 万山特区| 乌什县| 陇西县| 荃湾区| 高台县| 旺苍县| 梅州市| 双鸭山市| 全州县| 东平县| 房山区| 五指山市| 浏阳市| 云霄县| 宁国市| 山东| 商丘市| 红桥区| 资溪县| 阿城市| 青海省| 宁晋县| 北票市| 白水县|