„Ich möchte dir etwas über die Objektinitialisierung erzählen. Wenn du ein Objekt anlegst, musst du seinen Variablen Anfangswerte zuweisen, um zu verhindern, dass du auf ein Objekt zugreifst, das nicht über die Informationen verfügt, die es benötigt, um korrekt zu funktionieren.“

„Betrachten wir ein Datei-Objekt. Die mindestens notwendige Information für eine Datei ist ihr Name. Es wäre sinnlos, eine Datei ohne Namen zu erstellen.

„Angenommen, wir schreiben eine MeineDatei-Klasse, um mit Dateien zu arbeiten. Welche Informationen wären für jedes Objekt notwendig?“

„Der Name der Datei, die dem Objekt zugeordnet ist?“

„Ganz genau. Dafür fügen wir die Methode initialisieren() zu unserer Klasse hinzu. Das sieht dann so aus.“

Beispiel:
class MyFile
{
    private String filename = null;

    public void initialize(String name)
    {
        this.filename = name;
    }
…
}

„Wir haben die Initialisierungsmethode hinzugefügt, damit wir mit dem Objekt arbeiten können, indem wir die Methode aufrufen. Wir können die Methoden des Objekts sofort nach dem Aufruf der Initialisierungsmethode aufrufen. Wenn wir nicht mit einem Objekt arbeiten können, nennen wir es ungültig; andernfalls sagen wir, dass das Objekt gültig ist. Die Hauptaufgabe der initialisieren-Methode besteht darin, alle Daten entgegenzunehmen, die ein Objekt benötigt, damit es gültig ist.

„Ach so.“

„Lass uns die Aufgabe jetzt etwas schwieriger machen. Oder, bei genauerer Betrachtung, einfacher. Das kommt darauf an, wie man es sieht. Angenommen, ein Programmierer, der unsere Klasse verwendet, würde es praktischer finden, nur das Verzeichnis und den Kurznamen der Datei anstelle des vollständigen Pfades zu übergeben. Wir könnten eine weitere Initialisierungsmethode erstellen (Java bietet uns die Möglichkeit, mehrere Methoden mit identischen Namen zu erstellen), damit der Programmierer das tun kann. So würde unsere Klasse dann aussehen:“

Beispiel mit zwei Initialisierungsmethoden:
class MyFile
{
    private String filename = null;
    public void initialize(String name)
    {
        this.filename = name;
    }

    public void initialize(String folder, String name)
    {
        this.filename = folder + name;
    }

…
}

„Noch etwas: Wir müssen oft eine temporäre Kopie einer Datei neben der aktuellen erstellen.“

„Können wir eine Methode erstellen, die das erledigt?“

„Klar. Sieh mal.“

Erstelle eine Kopie neben der aktuellen Datei:
class MyFile
{
    private String filename = null;
    public void initialize(String name)
    {
        this.filename = name;
    }

    public void initialize(String folder, String name)
    {
        this.filename = folder + name;
    }

   // The filename will be stored in the same directory as file. 
    public void initialize(MyFile file, String name) 
    {       
        this.filename = file.getFolder() + name;
    }

…
}

„Und ich kann so viele dieser Methoden erstellen, wie ich will?“

„Naja, in einem angemessenen Rahmen. Aber technisch gesehen, ja, so viele, wie du willst.“

„Wann muss ich die Initialisierungsmethode aufrufen?“

„Unmittelbar nach der Erstellung des Objekts, um es gültig zu machen.“

Beispiele:
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");

String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\data\", "a.txt");

String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");

MyFile file2 = new MyFile();
file2.initialize("a.txt");

String text = file2.readText();

„Was ist diese ordnerAbrufen()-Methode?“

„Wir haben den Code hier nicht gezeigt. Es handelt sich um eine Methode, die eine Zeichenkette mit dem Namen des Ordners zurückgibt, in dem unsere Datei gespeichert ist.“