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
Libérer: 2024-12-29 05:47:10
original
642 Les gens l'ont consulté

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

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 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