Heim >Java >JavaBase >Welche Rolle spielt das Schlüsselwort „transient'?

Welche Rolle spielt das Schlüsselwort „transient'?

青灯夜游
青灯夜游Original
2020-12-24 10:43:3115575Durchsuche

Die Funktion des transienten Schlüsselworts ist: Durch transient geänderte Variablen nehmen nicht an der Serialisierung und Deserialisierung teil. Wenn ein Objekt serialisiert wird, werden die Werte transienter Variablen nicht in die serialisierte Darstellung einbezogen, wohingegen nicht-transiente Variablen einbezogen werden.

Welche Rolle spielt das Schlüsselwort „transient'?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Java 10-Version, Dell G3-Computer.

(Teilen von Lernvideos: Java-Lehrvideo)

Die Serialisierung von Java bietet einen Mechanismus zum Beibehalten von Objektinstanzen. Beim Beibehalten eines Objekts kann es sein, dass es ein spezielles Objektdatenelement gibt, für dessen Speicherung wir den Serialisierungsmechanismus nicht verwenden möchten.

Um die Serialisierung für ein Feld eines bestimmten Objekts zu deaktivieren, können Sie das Schlüsselwort transient vor dem Feld hinzufügen.

Wenn ein Objekt serialisiert wird, werden die Werte transienter Variablen nicht in die serialisierte Darstellung einbezogen, während nicht-transiente Variablen einbezogen werden.

Kurz gesagt: Variablen, die durch Transienten geändert wurden, nehmen nicht an der Serialisierung und Deserialisierung teil.

Als nächstes verwenden Sie Code, um dies zu beweisen.

Erstellen Sie eine neue Student-Klasse, um die Serializable-Schnittstelle zu implementieren, und schreiben Sie ihre toString-Methode neu, um die Beobachtung der Ergebnisse zu erleichtern.

Ein Altersattribut wird durch einen Übergang nicht geändert, und ein Namensattribut wird durch einen Übergang geändert.

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 + '\'' + '}';
    }

}

Dann testen Sie es in der TransientTest-Klasse.

PS:

Der Einfachheit des Codes halber führt die IO-Operation hier keine Try-Catch-Operation aus, sondern wird direkt ausgelöst.

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);
    }
}

Führen Sie die Hauptmethode aus und beobachten Sie die Druckinformationen der Konsole.

Es wurde festgestellt, dass sich das Namensattribut nach der Serialisierung und Deserialisierung von HuaGe in null geändert hat.

Dies zeigt, dass Variablen, die durch Transienten geändert wurden, nicht an der Serialisierung und Deserialisierung teilnehmen.

Gibt es Ausnahmen?

Wir wissen, dass es in Java zwei Serialisierungsmethoden gibt.

1. Implementieren Sie die Serializable-Schnittstelle.

2. Implementieren Sie die Externalisierbare Schnittstelle.

Externalisierbare Schnittstelle ist eine Unterklasse der serialisierbaren Schnittstelle

Der Quellcode lautet wie folgt:

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

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

Die beiden Methoden dieser Schnittstelle können angeben, welche Attribute in der Klasse serialisiert werden.

Bei Verwendung dieser Schnittstelle werden standardmäßig keine Attribute serialisiert, unabhängig davon, ob die Attribute transient geändert werden oder nicht. Daher verwenden Klassen, die die Externalizable-Schnittstelle implementieren, im Allgemeinen keine vorübergehenden Änderungsattribute mehr.

Zusammenfassung:

1. Durch Transient geänderte Variablen nehmen nicht an der Serialisierung und Deserialisierung teil

2.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmierunterricht! !

Das obige ist der detaillierte Inhalt vonWelche Rolle spielt das Schlüsselwort „transient'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn