Ordre d'exécution des blocs d'initialisation statiques et d'instance en Java
Lorsque vous travaillez avec des classes Java, il est essentiel de comprendre l'ordre dans lequel les classes statiques et les blocs d'initialisation d'instance sont exécutés. Ces blocs effectuent des opérations vitales telles que l'attribution de valeurs initiales et l'initialisation des membres de classe et d'objet.
Blocs d'initialisation d'instance
Les blocs d'initialisation d'instance, entourés d'accolades { }, sont exécutés chaque fois qu'une instance d'une classe est créée. Ils sont exécutés dans l'ordre dans lequel ils apparaissent dans le code de la classe. Ce comportement est cohérent dans toutes les classes.
Blocs d'initialisation statiques
Les blocs d'initialisation statiques, également entourés d'accolades { } et précédés du mot clé static, sont exécutés lorsque la classe est chargée. Ils ne sont associés à aucune instance spécifique et ne sont exécutés qu'une seule fois, quel que soit le nombre d'instances créées.
Ordre d'exécution spécifique
La spécification du langage Java (JLS) définit un ordre spécifique pour l'exécution des blocs d'initialisation statiques :
Exemple
Considérez le code suivant exemple :
class Grandparent { static { System.out.println("Static - Grandparent"); } } class Parent extends Grandparent { static { System.out.println("Static - Parent"); } } class Child extends Parent { static { System.out.println("Static - Child"); } }
Lorsque la méthode principale est exécutée, la sortie suivante est générée :
Static - Grandparent Static - Parent Static - Child
Cela démontre que les blocs d'initialisation statiques sont exécutés dans l'ordre parent -> sous-classe.
Exceptions
Il existe une exception notable à cette règle. Si la classe parent définit une classe qui n'est jamais référencée, son bloc d'initialisation statique ne sera pas exécuté. En effet, le chargeur de classes initialise uniquement les classes explicitement requises.
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!