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
Patricia Arquetteoriginal
2024-12-19 14:17:09883parcourir

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
    }
}

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

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

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
    }
}

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!

Déclaration:
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