Maison  >  Article  >  Java  >  Explication détaillée de l'ordre de chargement des classes en Java

Explication détaillée de l'ordre de chargement des classes en Java

高洛峰
高洛峰original
2017-01-13 09:10:111152parcourir

Cet article présente l'ordre de chargement des classes en Java Jetons un coup d'œil à l'introduction détaillée :

1 Lorsque la machine virtuelle charge une classe Java pour le. la première fois, ce sera Les blocs d'initialisation statiques, les variables membres statiques et les méthodes statiques sont initialisés une fois

2. Une instance de la classe ne sera créée que lorsque la nouvelle méthode est appelé

3. Processus de création d'instance de classe : L'initialisation est effectuée selon la relation d'héritage parent-enfant, exécutez d'abord la partie bloc d'initialisation de la classe parent, puis la méthode de construction de la classe parent ; puis exécuter le bloc d'initialisation de la sous-classe héritée par cette classe. Enfin, il y a la méthode de construction de la sous-classe

4. Quand le L'instance de classe est détruite, détruisez d'abord la partie sous-classe, puis détruisez la partie classe parent

Exemple

<span style="font-size: 14px;">public class Parent<br/>{<br/> public static int t = parentStaticMethod2();<br/> {<br/> System.out.println("父类非静态初始化块");<br/> }<br/> static<br/> {<br/> System.out.println("父类静态初始化块");<br/> }<br/> public Parent()<br/> {<br/> System.out.println("父类的构造方法");<br/> }<br/> public static int parentStaticMethod()<br/> {<br/> System.out.println("父类类的静态方法");<br/> return 10;<br/> }<br/> public static int parentStaticMethod2()<br/> {<br/> System.out.println("父类的静态方法2");<br/> return 9;<br/> }<br/> <br/> @Override<br/> protected void finalize() throws Throwable<br/> {<br/> // TODO Auto-generated method stub<br/> super.finalize();<br/> System.out.println("销毁父类");<br/> }<br/> <br/>}<br/>public class Child extends Parent<br/>{<br/> {<br/> System.out.println("子类非静态初始化块");<br/> }<br/> static<br/> {<br/> System.out.println("子类静态初始化块");<br/> }<br/> public Child()<br/> {<br/> System.out.println("子类的构造方法");<br/> }<br/> public static int childStaticMethod()<br/> {<br/> System.out.println("子类的静态方法");<br/> return 1000;<br/> }<br/> @Override<br/> protected void finalize() throws Throwable<br/> {<br/> // TODO Auto-generated method stub<br/> super.finalize();<br/> System.out.println("销毁子类");<br/> }<br/>}<br/>public class Test<br/>{<br/> <br/> public static void main(String[] args)<br/> {<br/> // TODO Auto-generated method stub<br/> Parent.parentStaticMethod();<br/>// Child child = new Child();<br/> <br/> }<br/><br/>}<br/></span>

Sortie

<span style="font-size: 14px;">父类的静态方法2<br/>父类静态初始化块<br/>父类类的静态方法<br/></span>

La méthode statique de la classe est chargée lorsqu'elle est appelée pour la première fois, et le membre statique de la classe est chargé dans l'ordre dans lequel il apparaît dans la classe. Lorsque la méthode statique 2 est appelée, affiche

<span style="font-size: 14px;">父类的静态方法2<br/>父类静态初始化块<br/>父类的静态方法2<br/></span>

Commentez Parent.parentStaticMethod();

Supprimez le commentaire Child child = new Enfant ( ; Cela peut apporter de l'aide. Si vous avez des questions, vous pouvez laisser un message pour communiquer.

<span style="font-size: 14px;">父类的静态方法2<br/>父类静态初始化块<br/>子类静态初始化块<br/>父类非静态初始化块<br/>父类的构造方法<br/>子类非静态初始化块<br/>子类的构造方法<br/></span>

Pour des articles plus détaillés sur l'ordre de chargement des classes en Java, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn