Première étape : charger la classe. Un objet Java sera chargé en classe avant l'initialisation et un objet Class sera généré dans la JVM. Le chargement d'une classe effectuera les opérations suivantes, et la description récursive est donnée ci-dessous.
Si la classe a une classe parent, sa classe parent est chargée en premier.
i Initialiser les membres statiques de cette classe
ii Exécuter le bloc de code statique de cette classe
Étape 2 : Créer un objet. Si la classe a une classe parent, lors de la création de l'objet, l'objet de sa classe parent sera créé en premier, les propriétés et méthodes de la sous-classe seront enveloppées dans la couche externe, puis la référence. de la sous-classe sera renvoyée. La description récursive est donnée ci-dessous.
Si la classe a une classe parent, créez d'abord l'objet de la classe parent.
i Initialiser les membres ordinaires de cette classe
ii Exécuter un bloc de code ordinaire
iii Appeler cette méthode de construction de classe
Exemple :
L'objet de classe est utilisé comme variable membre
public class Info{ public Info(String s) { System.out.println(s); } }
Classe parent
public class Parent { public static Info info = new Info("Parent static member"); //静态成员 public Info info2 = new Info("Parent common member"); //普通成员 static { //静态代码块 System.out.println("parent static block"); } { //普通代码块 System.out.println("parent common block"); } public Parent() { //父类构造方法 System.out.println("Parent.Parent()"); } }
Sous-classe
public class Child extends Parent{ public static Info info = new Info("Child static member"); //静态成员 public Info info2 = new Info("Child common member"); //普通成员 static { //静态代码块 System.out.println("Child static block"); } { //普通代码块 System.out.println("Child common block"); } public Child() { //子类构造方法 System.out.println("Child.Child()"); } }
Le processus de chargement de la classe de test suivant, nous ne créons pas d'objets, mais chargeons directement la classe et chargeons la sous-classe
public class InitObjectTest{ public static void main(String[] args) { try{ //Class.forName("Parent"); Class.forName("Child"); }catch(Exception e){ } //System.out.println("=============== now , we create an Object below ==========="); //new Parent(); } }
Résultats des tests :
Les résultats des tests sont conformes aux règles de chargement des classes écrites ci-dessus. Initialisez d'abord les membres statiques de la classe parent, puis exécutez le bloc statique de la classe parent, puis initialisez les membres statiques de la sous-classe. et enfin exécutez le bloc statique de la sous-classe. On voit que les membres statiques sont bien initialisés lorsque la classe est chargée.
Remarque : Le chargement de la classe ne se fait qu'une seule fois. Après cela, la classe ne sera plus chargée lors de la création de l'objet. C'est pourquoi le bloc de code statique n'est exécuté qu'une seule fois. .
Tutoriel recommandé : Tutoriel d'introduction à Java
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!