Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Ladereihenfolge von Klassen in Java

Detaillierte Erläuterung der Ladereihenfolge von Klassen in Java

高洛峰
高洛峰Original
2017-01-13 09:10:111116Durchsuche

In diesem Artikel wird die Ladereihenfolge von Klassen in Java vorgestellt:

1 Wenn die virtuelle Maschine eine Java-Klasse lädt Beim ersten Mal werden statische Initialisierungsblöcke, statische Mitgliedsvariablen und statische Methoden einmal initialisiert

2. Eine Instanz der Klasse wird nur erstellt, wenn die neue Methode vorhanden ist aufgerufen

3. Prozess der Klasseninstanzerstellung: Die Initialisierung erfolgt gemäß der Eltern-Kind-Vererbungsbeziehung. Führen Sie zuerst den Initialisierungsblockteil der übergeordneten Klasse aus, dann den Konstruktionsmethode der übergeordneten Klasse; dann den Initialisierungsblock der von dieser Klasse geerbten Unterklasse ausführen

4. Wenn die Klasse Wenn die Instanz zerstört wird, zerstören Sie zuerst den Teil der Unterklasse und dann den Teil der übergeordneten Klasse

Beispiel

<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>

Ausgabe

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

Die statische Methode in der Klasse wird geladen, wenn sie zum ersten Mal aufgerufen wird, und das statische Mitglied in der Klasse wird in der Reihenfolge geladen, in der sie in der Klasse erscheinen. Wenn die statische Methode 2 aufgerufen wird, geben Sie

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

Parent.parentStaticMethod(); auskommentieren

Entfernen Sie den Kommentar Child child = new Kind( ; Es kann Ihnen helfen. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation hinterlassen.

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

Ausführlichere Artikel zur Ladereihenfolge von Klassen in Java finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn