Was bedeutet der Modifikator transient?

Mit transient können nur Felder gekennzeichnet werden. Es kennzeichnet Variablen, die bei der Serialisierung eines Objektes nicht mit gespeichert werden sollen.

Das Beispiel demonstriert dies an einer Klasse mit zwei Date-Feldern, von denen eines als transient deklariert wurde. Nach Ausführen des Programms wird letzteres bei der Serialisierung nicht berücksichtigt, sodass bei der Deserialisierung null ausgegeben wird. Das zweite gibt den zur Laufzeit aktuellen Zeitpunkt aus.

Einige weitere Aspekte demonstriert das Beispiel:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;

public class TransientClass implements Serializable {

    private static String datnam = "myObjs.ser";
    private transient Date transDate = new Date();
    private Date date = new Date();

    private static final long serialVersionUID = -1676776445270664023L;

    public static void main(String[] args) {

        if (new File(datnam).exists()) {
            try (ObjectInputStream in = new ObjectInputStream(
                    new FileInputStream(datnam))) {
                TransientClass tc = (TransientClass) in.readObject();
                System.out.println("deserialized date: " + tc.date);
                System.out.println("deserialized transDate: " + tc.transDate); // null
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("'" + datnam + "' created");
        }

        try (ObjectOutputStream aus = new ObjectOutputStream(
                new FileOutputStream(datnam))) {
            aus.writeObject(new TransientClass());
            System.out.println("class serialized to '" + datnam + "'.");
        } catch (IOException ex) {
            System.out.println("couldn't write to file '" + datnam + "'.");
        }
    }
}