Chargement de classe
Avant de parler de l'initialisation des classes, expliquons l'ordre de chargement de la classe.
Ce qui suit est extrait de "Thinking in Java 4"
Puisque tout en java est un objet, de nombreuses activités
Ce problème est l'un des exemples plus simples. Comme nous le mentionnera dans le chapitre suivant, le code de chaque objet existe dans un fichier séparé. À moins que le code ne soit vraiment nécessaire, ce fichier ne sera pas chargé. Généralement, nous pouvons penser que le code ne se chargera pas réellement à moins qu'un objet de cette classe ne soit construit. Parce qu'il y a une ambiguïté subtile dans la méthode statique, il peut également être considéré que "le code de classe est chargé lorsqu'il est utilisé pour la première fois".
La première fois que vous l'utilisez, c'est également là que l'initialisation statique se produit. Lors du chargement, tous les objets statiques et les blocs de code statique sont initialisés dans leur ordre d'origine (c'est-à-dire l'ordre dans lequel ils sont écrits dans le code de définition de classe). Bien sûr, les données statiques ne seront initialisées qu'une seule fois.
Pour le dire simplement, lorsque la classe a une relation d'héritage, le chargeur de classe le façonnera en arrière et chargera les classes liées.
Par exemple:
La classe B étend la classe A lorsque nous nouveaux B (), le chargeur de classe charge automatiquement le code de A
Ordre d'initialisation de la classe
Habituellement, la séquence d'initialisation est la suivante:
(objet statique et bloc de code statique, initialisé dans leur ordre)> Variables membre> Constructeur
Code de test
classe publique classinit {/ ** * @title: main * @description: Class Initialization Order Test * @param: @param args * @return: void * @throws * / public static void main (String [] args) {// TODO Méthode générée automatiquement Stub new B (); }} classe A {statique {System.out.println ("A's Static Code Block ..."); } String public S1 = PrTString ("A de la variable de membre ..."); String statique public S2 = prTString ("A's STATIC Variable ..."); public a () {System.out.println ("A's Constructor ..."); } public static String PrtString (String str) {System.out.println (str); retourner null; }} La classe B étend une chaîne publique SS1 = PrTString ("la variable membre de B ..."); String statique publique SS2 = PrTString ("B's STATIC Variable ..."); public b () {System.out.println ("B's Constructor ..."); } privé statique a a = new a (); statique {System.out.println ("B Block de code statique de B ..."); } {System.out.println ("Code Block ..."); }} Résultats des tests
Bloc de code statique de A ...
A variable statique de A ...
La variable statique de B ...
Variables membre d'un ...
Constructeur de A ...
Bloc de code statique de B ...
Variables membre d'un ...
Constructeur de A ...
Variables membres de B ...
Bloc de code ...
Le constructeur de b ...
Résumer
Ce qui précède est l'intégralité du contenu de l'ordre d'initialisation de la classe en Java. J'espère que cela sera utile à tous ceux qui utilisent Java.