Maison > Java > javaDidacticiel > Pourquoi `this()` et `super()` doivent-ils être les premières instructions d'un constructeur Java ?

Pourquoi `this()` et `super()` doivent-ils être les premières instructions d'un constructeur Java ?

Patricia Arquette
Libérer: 2024-12-19 14:17:09
original
880 Les gens l'ont consulté

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

Pourquoi this() et super() doivent-ils être invoqués avant toutes les autres instructions dans un constructeur ?

Java applique la règle stricte selon laquelle this() et super() les appels doivent être les premières instructions dans un constructeur. Cette restriction existe pour garantir la bonne initialisation des classes parents avant l'exécution des constructeurs de classes enfants.

Par exemple, le code suivant déclenchera une erreur de compilation car super(c) n'est pas la première instruction dans MySubClass. constructeur :

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        int c = a + b;
        super(c);  // COMPILE ERROR
    }
}
Copier après la connexion

Cependant, cela peut être contourné en modifiant le code à :

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        super(a + b);  // OK
    }
}
Copier après la connexion

Pourquoi l'ordre est important

L'appel super() dans un constructeur de sous-classe initialise les variables d'instance de la classe parent et appelle le constructeur parent. Cela garantit que la classe parent est entièrement initialisée avant que le constructeur de la sous-classe ne procède.

Si super() n'était pas obligatoirement la première instruction, il serait possible d'effectuer des opérations qui reposent sur l'initialisation de la classe parent avant il a en fait été initialisé, ce qui peut conduire à un comportement indéfini.

Exceptions et solutions de contournement

Bien que le Le compilateur nécessite que this() et super() soient invoqués en premier, il ne restreint pas l'exécution de la logique au sein du constructeur. La logique peut être placée dans une seule expression ou transmise aux appels super() ou this().

Par exemple :

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        super(Arrays.asList(new Object[] { a, b }));  // OK
    }
}
Copier après la connexion

Conclusion

La restriction selon laquelle this() et super() doivent être les premières instructions d'un constructeur sert à garantir une initialisation correcte de l'objet et à éviter les erreurs potentielles causées par un accès prématuré aux membres de la classe parent avant qu'ils ne soient correctement initialisés. Cela impose un ordre prévisible d'exécution du constructeur pour les classes, garantissant l'intégrité et la cohérence des objets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal