Maison > Java > javaDidacticiel > Pourquoi ce programme Java affiche-t-il « YYXZ » au lieu de « XZYY » ?

Pourquoi ce programme Java affiche-t-il « YYXZ » au lieu de « XZYY » ?

Susan Sarandon
Libérer: 2024-12-16 19:31:11
original
838 Les gens l'ont consulté

Why Does This Java Program Output

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();
    }
}
Copier après la connexion

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 :

  1. Initialiseurs de variables statiques et blocs d'initialisation statiques, dans l'ordre textuel.
  2. L'appel super() dans le constructeur, qu'il soit explicite ou implicite.
  3. Variable d'instance initialiseurs et blocs d'initialisation d'instance, dans l'ordre textuel.
  4. Corps restant du constructeur après super().

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 :

  1. Initialiseurs de variables d'instance de classe X (b)
  2. Initialiseurs de variables d'instance de classe Y (y)
  3. Corps constructeur de classe X (imprime "X")
  4. Corps constructeur de classe Z (imprime "Z")

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!

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