Maison >Java >javaDidacticiel >Comment les blocs d'initialisation statiques et d'instance sont-ils ordonnés en 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 :
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!