„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 MeineDatei
{
    private String dateiname = null;

    public void initialisieren(String name)
    {
        this.dateiname = 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 MeineDatei
{
    private String dateiname = null;
    public void initialisieren(String name)
    {
        this.dateiname = name;
    }

    public void initialisieren(String ordner, String name)
    {
        this.dateiname = ordner + 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 MeineDatei
{
    private String dateiname = null;
    public void initialisieren(String name)
    {
        this.dateiname = name;
    }

    public void initialisieren(String ordner, String name)
    {
        this.dateiname = ordner + name;
    }

   // Der dateiname wird im gleichen Verzeichnis wie datei gespeichert. 
    public void initialisieren(MeineDatei datei, String name) 
    {       
        this.dateiname = datei.ordnerAbrufen() + 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:
MeineDatei datei = new MeineDatei();
datei.initialisieren("c:\daten\a.txt");

String text = datei.textEinlesen();
MeineDatei datei = new MeineDatei();
datei.initialisieren("c:\daten\", "a.txt");

String text = datei.textEinlesen();
MeineDatei datei = new MeineDatei();
datei.initialisieren("c:\daten\a.txt");

MeineDatei datei2 = new MeineDatei();
datei2.initialisieren("a.txt");

String text = datei2.textEinlesen();
undefined
2
Aufgabe
Java Syntax, Level 5, Lektion 6
Gesperrt
Code-Eingabe
Manchmal darf man gar nicht nachdenken, man muss es einfach raushauen! Auch wenn es sich paradox anhört, manchmal „erinnern“ sich deine Finger besser als dein bewusster Verstand. Deshalb wirst du es im Rahmen der Schulung im geheimen CodeGym-Zentrum manchmal mit Aufgaben zu tun bekommen, bei denen du Code eingeben musst. Wenn du Code eingibst, gewöhnst du dich an die Syntax und sammelst ein wenig dunkle Materie. Außerdem tust du etwas gegen deine Faulheit!

„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.“