ホームページ  >  記事  >  Java  >  一時的なキーワードの役割は何ですか

一時的なキーワードの役割は何ですか

青灯夜游
青灯夜游オリジナル
2020-12-24 10:43:3115527ブラウズ

transient キーワードの機能は次のとおりです。transient によって変更された変数はシリアル化と逆シリアル化には関与しません。オブジェクトがシリアル化されると、一時変数の値はシリアル化された表現に含まれませんが、非一時変数は含まれます。

一時的なキーワードの役割は何ですか

このチュートリアルの動作環境: Windows7 システム、Java10 バージョン、Dell G3 コンピューター。

(学習ビデオ共有: java 教育ビデオ )

Java のシリアル化は、オブジェクト インスタンスを永続化するためのメカニズムを提供します。オブジェクトを永続化する場合、シリアル化メカニズムを使用して保存したくない特殊なオブジェクト データ メンバーが存在する場合があります。

特定のオブジェクトのフィールドのシリアル化をオフにするには、このフィールドの前にキーワード transient を追加します。

オブジェクトがシリアル化されると、一時変数の値はシリアル化された表現に含まれませんが、非一時変数は含まれます。

つまり、transient によって変更された変数はシリアル化と逆シリアル化には関与しません。

次に、コードを使用してそれを証明します。

Serializable インターフェイスを実装する新しい Student クラスを作成し、その toString メソッドを書き換えて結果を観察しやすくします。

年齢属性はトランジェントによって変更されませんが、名前属性はトランジェントによって変更されます。

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 に変更されたことがわかりました。

これは、

が一時変数によって変更されたことを示しています。シリアル化と逆シリアル化には参加しません。

# 例外はありますか?

Java には 2 つのシリアル化メソッドがあることがわかっています。

1. Serializable インターフェイスを実装します。

2. 外部化可能なインターフェイスを実装します。

外部化可能なインターフェイスはシリアル化可能なインターフェイスのサブクラスです。

ソース コードは次のとおりです。

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

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

このインターフェイスの 2 つのメソッドは、クラス内のどの属性をシリアル化するかを指定できます。

このインターフェイスを使用する場合、プロパティが一時的に変更されるかどうかに関係なく、

デフォルトではプロパティはシリアル化されません。したがって、Externalizable インターフェイス

を実装するクラスは、通常、一時的な変更属性を使用しなくなりました。

概要:

1. トランジェントによって変更された変数は、シリアル化と逆シリアル化には関与しません

#2. Transient は通常、Serializable インターフェイスを実装するクラスで使用されます。 プログラミング関連の知識について詳しくは、

プログラミング教育

をご覧ください。 !

以上が一時的なキーワードの役割は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。