Maison >Java >javaDidacticiel >Quel est l'ordre d'exécution correct de l'initialisation des variables d'instance et de l'exécution du constructeur en Java ?

Quel est l'ordre d'exécution correct de l'initialisation des variables d'instance et de l'exécution du constructeur en Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-29 05:47:10640parcourir

What's the Correct Execution Order of Instance Variable Initialization and Constructor Execution in Java?

Initialisation de variable d'instance et exécution de constructeur en Java

Une idée fausse courante concernant l'initialisation d'objet Java est l'ordre dans lequel les champs et les constructeurs sont exécutés . Clarifions ce concept avec un exemple.

Dans l'extrait de code donné :

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();
    }
}

Contrairement à l'hypothèse selon laquelle les champs sont initialisés avant les constructeurs, la sortie de ce programme est "YZX". Pour comprendre pourquoi, nous devons nous plonger dans le processus d'initialisation de Java.

Ordre d'initialisation :

Java initialise les classes dans un ordre spécifique :

  1. Membres statiques : Variables statiques et initialiseurs en texte order.
  2. Invocation du constructeur : Appel du super constructeur, explicite ou implicite.
  3. Variable d'instance et blocs d'initialisation : Champs et blocs d'initialisation d'instance dans ordre textuel.
  4. Corps du constructeur : Code restant dans le constructeur après l'appel super().

Dans l'exemple ci-dessus, la séquence d'événements est :

  • Le constructeur de Y est appelé (Y).
  • Le constructeur de Z appelle le constructeur de X (YZ).
  • Le constructeur de X est appelé (XYZ).
  • La variable d'instance b de X est initialisée (YZXb).
  • La variable d'instance y de Z est initialisée (YZXby).

Par conséquent, l'ordre correct d'exécution est "YZX". Cela souligne l'importance de comprendre l'ordre d'initialisation Java pour éviter un comportement inattendu dans la construction d'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