Maison >Java >javaDidacticiel >Comment les blocs d'initialisation statiques et d'instance sont-ils ordonnés en Java ?

Comment les blocs d'initialisation statiques et d'instance sont-ils ordonnés en Java ?

DDD
DDDoriginal
2024-11-29 06:32:20279parcourir

How are Static and Instance Initializer Blocks Ordered in Java?

Ordre d'initialisation des blocs d'initialisation statiques et d'instance en Java

Java initialise les blocs d'initialisation statiques et d'instance dans un ordre spécifique, garantissant ainsi le chargement correct et l'exécution des cours. Cet ordre est crucial pour la gestion des dépendances et de l'allocation des ressources.

Initialiseurs statiques

Java initialise les blocs d'initialisation statiques pour une classe uniquement lorsque cette classe ou un membre statique de cette classe est utilisé en premier. Les éléments suivants déclenchent l'initialisation des blocs statiques :

  • Instanciation d'une classe
  • Invocation d'une méthode statique d'une classe
  • Attribution d'une valeur à un champ statique
  • Utilisation d'un champ statique non constant
  • Exécution d'une instruction assert dans un niveau supérieur class

Initialiseurs d'instance

Les blocs d'initialisation d'instance, en revanche, sont exécutés immédiatement avant le constructeur de la classe. L'ordre d'exécution est déterminé par l'apparition de ces blocs dans la définition de la classe.

Exemple

Considérez l'extrait de code suivant :

class Parent {
    // Static initializer
    static {
        System.out.println("static - parent");
    }

    // Instance initializer
    {
        System.out.println("instance - parent");
    }

    // Constructor
    public Parent() {
        System.out.println("constructor - parent");
    }
}

class Child extends Parent {
    // Static initializer
    static {
        System.out.println("static - child");
    }

    // Instance initializer
    {
        System.out.println("instance - child");
    }

    // Constructor
    public Child() {
        System.out.println("constructor - child");
    }
}

Lorsque la classe Child est instanciée, la sortie suivante est générée :

static - parent
static - child
instance - parent
constructor - parent
instance - child
constructor - child

Cela démontre que la classe statique L'initialiseur de la classe parent (dans ce cas, Parent) est exécuté avant celui de la classe enfant (Child). Au sein de chaque classe, les blocs d'initialisation d'instance sont exécutés avant le constructeur.

Exception pour les classes inutilisées

En Java, les classes qui ne sont pas utilisées ne sont jamais chargées ni initialisées. Cela s'applique aux blocs d'initialisation statiques et d'instance. Dans l'exemple de code fourni, l'ajout d'une nouvelle classe (IAmAClassThatIsNeverUsed) qui n'est jamais référencée n'affecte pas l'ordre d'initialisation des autres classes.

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