Ordre d'initialisation des champs et code constructeur en Java
Dans un programme Java, l'ordre d'initialisation des champs et d'exécution du code constructeur peut être déroutant, notamment en ce qui concerne la préséance entre les deux. Cependant, la spécification de la machine virtuelle Java décrit une séquence claire d'événements qui détermine l'ordre approprié :
-
Variables et blocs statiques : Premièrement, les variables statiques et les blocs d'initialisation statiques sont initialisés dans ordre textuel, à condition que leur classe n'ait pas été initialisée auparavant.
-
Invocation du Super Constructeur : Ensuite, l'appel super() est exécuté dans le constructeur, explicitement ou implicitement. Cet appel invoque le constructeur de la classe parent.
-
Initialisation des champs et blocs : Suite à l'appel super(), les variables d'instance sont initialisées dans l'ordre textuel, ainsi que tous les blocs d'initialisation d'instance associés.
-
Corps du constructeur : Enfin, le corps restant du constructeur est exécuté une fois l'appel super() terminé. terminé.
Dans l'extrait de code fourni, la sortie "YZXZ" est générée en raison de l'ordre d'initialisation spécifié. Décomposons-le étape par étape :
- Les initialiseurs statiques et les variables statiques ne sont pas présents dans le code.
- L'appel du constructeur Z() est exécuté, appelant le constructeur de superclasse de Z X( ) implicitement.
- Le constructeur de superclasse X() est exécuté, imprimant "X" dans le console.
- La variable d'instance y dans la classe Z est initialisée, imprimant "Y" sur la console.
- La variable d'instance b dans la classe X est initialisée, imprimant "Z" sur la console (car Z est la sous-classe actuelle).
Par conséquent, la sortie "YZXZ" reflète correctement l'ordre d'initialisation et d'exécution défini par la machine virtuelle Java Spécification.
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!