Maison > Java > javaDidacticiel > Quel est l'ordre d'initialisation exact des champs et des constructeurs en Java ?

Quel est l'ordre d'initialisation exact des champs et des constructeurs en Java ?

Patricia Arquette
Libérer: 2024-12-14 18:22:17
original
853 Les gens l'ont consulté

What's the Exact Initialization Order of Fields and Constructors in Java?

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 :

  1. Les initialiseurs statiques et les variables statiques ne sont pas présents dans le code.
  2. L'appel du constructeur Z() est exécuté, appelant le constructeur de superclasse de Z X( ) implicitement.
  3. Le constructeur de superclasse X() est exécuté, imprimant "X" dans le console.
  4. La variable d'instance y dans la classe Z est initialisée, imprimant "Y" sur la console.
  5. 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!

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