Lorsqu'une classe est utilisée pour la première fois, elle doit être chargée par le chargeur de classe, et le processus de chargement implique les deux points suivants :
(1) Lors du chargement d'une classe, si son parent la classe n'est pas Si elle n'est pas chargée, alors sa classe parent doit être chargée en premier
(2) Une fois la classe chargée en mémoire, ses champs de données statiques et ses blocs statiques sont exécutés dans l'ordre d'apparition dans le code.
2. Lors de l'appel du constructeur d'une classe, le processus d'appel implique les trois points suivants :
(1) Appel du constructeur de la classe parent ; >
(2) Initialisez les champs de données d'instance et exécutez les blocs d'instance dans l'ordre dans lequel ils apparaissent dans le code (3) Exécutez son corps de constructeur. La théorie doit encore être prouvée par la pratique. Voici un exemple simple pour le prouver./** * * @author Sel * * 2014.3.29 */public class InitializationDemo { public static void main(String[] args) { new InitializationDemo(); } public InitializationDemo() { new B(); } { System.out.println("2. Initialization 的实例块。"); } static { System.out.println("1. Initialization 的静态块。"); } }class A { A() { System.out.println("6. A 的构造函数体。"); } { System.out.println("5. A 的实例块。"); } static { System.out.println("3. A 的静态块。"); } }class B extends A { B() { System.out.println("8. B 的构造函数体。"); } { System.out.println("7. B 的实例块。"); } static { System.out.println("4. B 的静态块。"); } }L'exemple ci-dessus génère le texte correspondant dans chaque partie de la classe, de sorte que l'ordre d'exécution puisse être vu à partir de la sortie. La sortie correspondante de est la suivante :
1. Initialization 的静态块。 2. Initialization 的实例块。 3. A 的静态块。 4. B 的静态块。 5. A 的实例块。 6. A 的构造函数体。 7. B 的实例块。 8. B 的构造函数体。