Maison >Java >javaDidacticiel >Pourquoi ce programme Java affiche-t-il « YYXZ » au lieu de « XZYY » ?
Comprendre l'ordre d'initialisation dans les constructeurs Java
Lors de la construction d'un objet en Java, il est crucial de comprendre l'ordre d'initialisation. Cette question se pose : "Quelqu'un peut-il clarifier le résultat du programme suivant ?"
Le code :
class X { Y b = new Y(); X() { System.out.print("X"); } } class Y { Y() { System.out.print("Y"); } } public class Z extends X { Y y = new Y(); Z() { System.out.print("Z"); } public static void main(String[] args) { new Z(); } }
Le résultat attendu était "XZYY" en supposant que les constructeurs sont initialisés avant l'instance variables. Cependant, le résultat est en réalité « YYXZ ». Cet écart souligne l'importance de comprendre l'ordre d'initialisation réel.
Selon la spécification de la machine virtuelle Java, l'ordre d'initialisation est le suivant :
Dans ce cas, les variables et les blocs statiques ne sont pas impliqués. L'appel super() se produit implicitement dans le constructeur de la classe Z, il n'est donc pas visible dans le code. Par conséquent, l'ordre d'initialisation est :
Cela explique la sortie "YYXZ."
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!