Heim >Java >javaLernprogramm >Warum muss „this()' oder „super()' die erste Anweisung in einem Java-Konstruktor sein?
Java schreibt vor, dass, wenn ein Konstruktor this() oder super() aufruft, Diese Aufrufe müssen die ersten Anweisungen des Konstruktors sein. Diese Anforderung stellt Folgendes sicher:
Der Konstruktor der übergeordneten Klasse muss die Instanz der übergeordneten Klasse initialisieren, bevor eine Verarbeitung in der untergeordneten Klasse erfolgen kann. Dadurch wird sichergestellt, dass im Unterklassenkonstruktor aufgerufene Methoden darauf vertrauen können, dass die übergeordnete Klasse bereits korrekt eingerichtet ist.
Wenn this oder super nicht als erste Anweisungen erforderlich wären wäre es möglich, Methoden für die übergeordnete Klasse auszuführen, bevor deren Konstruktor ausgeführt wurde. Zum Beispiel:
public class MySubClass extends MyClass { public MySubClass() { someMethodOnSuper(); // ERROR: super not yet constructed super(); // This call would be moved to the beginning of the constructor. } }
In Fällen, in denen die übergeordnete Klasse einen Standardkonstruktor hat, fügt der Compiler automatisch einen Aufruf von super() als erste Anweisung der untergeordneten Klasse ein Konstrukteur. Dies ist notwendig, da jede Java-Klasse von Object erbt, dessen Konstruktor zuerst aufgerufen werden muss. Durch die Durchsetzung der Anforderung der ersten Anweisung wird eine konsistente Ausführungsreihenfolge des Konstruktors sichergestellt:
Object -> Parent -> Child -> ChildOfChild -> SoOnSoForth
Indem der Compiler erlaubt, dass this() oder super() nur als erste Anweisung aufgerufen wird verhindert ungültigen Code wie diesen:
public MySubClass extends MyClass { public MySubClass() { int c = a + b; super(); // COMPILE ERROR } }
In diesem Beispiel muss super() die erste Anweisung sein und die Berechnung von c darf ihr nicht vorausgehen. Die Funktionalität kann jedoch erreicht werden, indem der Konstruktor wie folgt umgeschrieben wird:
public MySubClass extends MyClass { public MySubClass() { super(a + b); // OK } }
Die Anforderung, this() und super() als erste Anweisungen in einem Konstruktor zu platzieren, stellt die Korrektheit sicher Die Ausführungsreihenfolge verhindert eine vorzeitige Methodenausführung und ermöglicht dem Compiler die automatische Verarbeitung von Standardkonstruktoren. Ohne diese Einschränkung könnte ungültiger Code geschrieben werden, was zu unzuverlässigem Verhalten oder Laufzeitfehlern führen würde.
Das obige ist der detaillierte Inhalt vonWarum muss „this()' oder „super()' die erste Anweisung in einem Java-Konstruktor sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!