Heim > Java > javaLernprogramm > Warum müssen „this()' und „super()' die ersten Anweisungen in einem Java-Konstruktor sein?

Warum müssen „this()' und „super()' die ersten Anweisungen in einem Java-Konstruktor sein?

Patricia Arquette
Freigeben: 2024-12-19 14:17:09
Original
909 Leute haben es durchsucht

Why Must `this()` and `super()` Be the First Statements in a Java Constructor?

Warum müssen this() und super() vor allen anderen Anweisungen in einem Konstruktor aufgerufen werden?

Java erzwingt die strenge Regel, dass this() und super() Aufrufe müssen die ersten Anweisungen innerhalb eines Konstruktors sein. Diese Einschränkung besteht, um die ordnungsgemäße Initialisierung der übergeordneten Klassen vor der Ausführung der Konstruktoren der untergeordneten Klassen sicherzustellen.

Zum Beispiel löst der folgende Code einen Fehler bei der Kompilierung aus, da super(c) nicht die erste Anweisung in MySubClass ist Konstruktor:

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        int c = a + b;
        super(c);  // COMPILE ERROR
    }
}
Nach dem Login kopieren

Dies kann jedoch umgangen werden, indem der Code geändert wird zu:

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        super(a + b);  // OK
    }
}
Nach dem Login kopieren

Warum die Reihenfolge wichtig ist

Der super()-Aufruf innerhalb eines Unterklassenkonstruktors initialisiert die Instanzvariablen der übergeordneten Klasse und ruft den übergeordneten Konstruktor auf. Dadurch wird sichergestellt, dass die übergeordnete Klasse vollständig initialisiert wird, bevor der Konstruktor der Unterklasse fortfährt.

Wenn super() nicht als erste Anweisung erforderlich wäre, könnten Operationen ausgeführt werden, die darauf angewiesen sind, dass die übergeordnete Klasse zuvor initialisiert wurde Es wurde tatsächlich initialisiert, was möglicherweise zu undefiniertem Verhalten führt.

Ausnahmen und Problemumgehungen

Obwohl die Der Compiler erfordert, dass this() und super() zuerst aufgerufen werden. Dies schränkt die Ausführung der Logik innerhalb des Konstruktors nicht ein. Logik kann in einem einzelnen Ausdruck platziert oder an die Aufrufe super() oder this() übergeben werden.

Zum Beispiel:

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        super(Arrays.asList(new Object[] { a, b }));  // OK
    }
}
Nach dem Login kopieren

Schlussfolgerung

Die Einschränkung, dass this() und super() die ersten Anweisungen innerhalb eines Konstruktors sein müssen, dient dazu, eine ordnungsgemäße Objektinitialisierung sicherzustellen und potenzielle Fehler zu verhindern, die durch vorzeitigen Zugriff auf übergeordnete Klassenmitglieder verursacht werden, bevor diese ordnungsgemäß initialisiert wurden. Dies erzwingt eine vorhersehbare Reihenfolge der Konstruktorausführung für Klassen und gewährleistet so die Objektintegrität und -konsistenz.

Das obige ist der detaillierte Inhalt vonWarum müssen „this()' und „super()' die ersten Anweisungen in einem Java-Konstruktor sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage