搜尋
首頁JavaJava基礎transient關鍵字的作用是什麼

transient關鍵字的作用是:被transient修飾的變數不參與序列化和反序列化。當一個物件被序列化的時候,transient型變數的值不包括在序列化的表示中,然而非transient型的變數是被包含進去的。

transient關鍵字的作用是什麼

本教學操作環境:windows7系統、java10版、Dell G3電腦。

(學習影片分享:java教學影片

Java的serialization提供了一個持久化物件實例的機制。當持久化物件時,可能有一個特殊的物件資料成員,我們不想用serialization機制來保存它。

為了在一個特定物件的一個網域上關閉serialization,可以在這個網域前面加上關鍵字transient。

當一個物件被序列化的時候,transient型變數的值不包括在序列化的表示中,然而非transient型的變數是被包含進去的。

簡而言之,被transient修飾的變數不參與序列化和反序列化。

接下來用程式碼來證明一下。

新建一個Student類別實作Serializable 接口,並重寫其toString方法以便於觀察結果。

一個age屬性不會被transient修飾,一個name屬性被transient修飾。

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

    public Student() {
    }

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

    @Override
    public String toString() {
        return "Student{" + "age=" + age + ", name='" + name + '\'' + '}';
    }

}

然後在TransientTest類別裡邊測試。

PS:

為了程式碼簡潔這裡的IO操作沒有進行try catch操作而是直接拋出了。

public class TestTransient {

    public static void main(String[] args) throws Exception {
        // 实例化一个Student对象.
        Student student = new Student(15, "HuaGe");
        System.out.println(student);

        // 将student对象写入磁盘文件(序列化)
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.txt"));
        oos.writeObject(student);
        oos.close();

        // 从磁盘文件读取student对象(反序列化)
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.txt"));
        student = (Student) ois.readObject();
        System.out.println(student);
    }
}

執行main方法,觀察控制台列印資訊。

發現經過了序列化和反序列化後,name屬性從HuaGe變成null.

這就說明了被transient修飾的變數不參與序列化和反序列化。

那有沒有例外吶?

我們知道,java中有兩種序列化的方式。

1. 實作Serializable介面。

2. 實作Externalizable介面。

Externalizable介面是Serializable介面的子類別

原始碼如下

public interface Externalizable extends java.io.Serializable {
 
    void writeExternal(ObjectOutput out) throws IOException;

   
    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}

這個介面的兩個方法可以指定對類別中的哪些屬性進行序列化。

使用這個介面時,無論屬性有沒有被transient修飾,

預設不會對任何屬性進行序列化。所以實作了Externalizable介面的類別

一般不再使用transient修飾屬性。

總結:

#1. 被transient修飾的變數不參與序列化與反序列化

2. transient一般在實作了Serializable介面的類別中使用。

更多程式相關知識,請造訪:程式設計教學! !

以上是transient關鍵字的作用是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境