Heute habe ich „Java Programmierung Gedanken (4. chinesische Ausgabe)“ gelesen und gerade den Wissenspunkt der Initialisierung von Mitgliedern in einer Klasse überprüft. Um den Eindruck zu vertiefen und anderen eine Referenz zu geben, beziehen Sie sich auf die Beispiele im Buch und ändern Sie sie, um den folgenden Code zu erhalten:
Dateiname: HelloWorld.java
Paketname: main
package main; class Bowl { Bowl(int marker){ System.out.println("Bowl("+marker+")"); } void f1(int marker){ System.out.println("f1("+marker+")"); } } class Table{ static Bowl bowl1 = new Bowl(1); public Table() { System.out.println("Table()"); bowl2.f1(1); } void f2 (int marker){ System.out.println("f2("+marker+")"); } static Bowl bowl2 = new Bowl(2); } class Cupboard{ { System.out.println("Cupboard类普通代码块执行"); } Bowl bowl3 = new Bowl(3); // 注意,此处不是静态成员 static Bowl bowl4 = new Bowl(4); static{ System.out.println("Cupboard类静态代码块执行"); } public Cupboard() { // TODO Auto-generated constructor stub System.out.println("Cupboard()"); bowl4.f1(2); } void f3(int marker){ System.out.println("f3("+marker+")"); } static Bowl bowl5 = new Bowl(5); } public class HelloWorld { public static void main(String args[]){ System.out.println("Creating new Cupboard() in main"); new Cupboard(); table.f2(1); cupboard.f3(1); } static Table table = new Table(); static Cupboard cupboard = new Cupboard(); }
Lassen Sie uns die Funktionsweise dieses Programms analysieren.
1. Wenn die Java Virtual Machine die Hauptmethode ausführen möchte, muss sie zunächst die Klasse HelloWorld laden
2. Es wird festgestellt, dass die Klasse HelloWorld statische Daten enthält (nur statische). Mitglieder) und beginnt mit der Initialisierung der statischen Mitglieder
Zuerst
【1】 static Table table = new Table(); Die Table-Klasse muss also geladen werden. Es wurde festgestellt, dass die Klasse statische Mitglieder enthält und die Initialisierungsoperationen gemäß der definierten Reihenfolge
【2】static Bowl bowl1 = new Bowl(1); Ausgabe: Bowl(1)
【3】 static ausgeführt werden Schüssel bowl2 = neue Schüssel( 2); Ausgabe: Schüssel(2)
【4】KonstruktorTabelle(), Ausgabe: Tabelle() und f1(1)
Zweitens
【1】 static Cupboard cupboard = new Cupboard(); Die Cupboard-Klasse muss also geladen werden. Es wurde festgestellt, dass diese Klasse statische Daten enthält (einschließlich statischer Mitglieder und statischer Codeblöcke) und der Initialisierungsvorgang gemäß der durch die beiden
【2】 static Bowl bowl4 = new Bowl(4); : Bowl(4)
【3】
static{
System.out.println("Ausführung des statischen Codeblocks der Schrankklasse");
}
Ausgabe: Ausführung des statischen Codeblocks der Schrankklasse
【4】 static Bowl bowl5 = new Bowl(5); Ausgabe: Bowl(5)
Nachdem das statische Mitglied initialisiert wurde, wird das Objekt durch new generiert. Es wurde festgestellt, dass die Klasse Elementdefinitionszuweisungen und gewöhnliche Codeblöcke enthält und der Initialisierungsvorgang gemäß der Reihenfolge ihrer Definition ausgeführt wird
【1】
{
System.out.println(" Ausführung gewöhnlicher Codeblöcke der Schrankklasse" );
}
Ausgabe: Ausführung gewöhnlicher Codeblöcke der Schrankklasse
【2】 Schüssel Schüssel3 = neue Schüssel(3); Ausgabe: Schüssel(3)
【3 】Konstruktor Cupboard(), Ausgabe: Cupboard() und f1(2)
3. Geben Sie die Hauptmethode ein
【1】 System.out.println("Creating new Cupboard() in main") ; Ausgabe: Erstellen eines neuen Cupboard( ) in main
【2】 new Cupboard(); definiert. Die Ausgabe ist: normale Codeblockausführung der Schrankklasse und Bowl( 3)
【3】Konstruktor Cupboard(), Ausgabe: Schrank() und f1(2)
【4】 table.f2(1) ; Ausgabe: f2(1)
【5】 cupboard .f3(1); Ausgabe: f3(1)
Zusammenfassend ist das Ausgabeergebnis des Programms:
Bowl(1)
Bowl(2)
Table()
f1 (1)
Bowl(4)
Ausführung des statischen Codeblocks der Schrankklasse
Bowl(5)
Ausführung des gewöhnlichen Codeblocks der Schrankklasse
Bowl(3)
Cupboard()
f1(2)
Neues Cupboard() in main erstellen
Cupboard-Klasse, normale Codeblockausführung
Bowl(3)
Cupboard ()
f1(2)
f2(1 )
f3(1)
Die Initialisierung von Java-Klassendaten wird wie folgt zusammengefasst:
1 und statische Codeblöcke werden in der hier definierten Reihenfolge initialisiert. Zu beachten ist, dass die Voraussetzung für die Ausführung von statischem Code darin besteht, dass die Java Virtual Machine diese Klasse zuerst laden muss und statische Daten nur einmal initialisiert werden. Die Klasse wird geladen, wenn ein Objekt einer Klasse zum ersten Mal generiert wird oder wenn zum ersten Mal auf statische Datenelemente zugegriffen wird, die zur Klasse gehören.
2. Zuweisungen an gewöhnlichen Memberdefinitionen und gewöhnlichen Codeblöcken werden in der Reihenfolge der Definition initialisiert
3 Schließlich wird die
KonstruktormethodeInitialisierung durchgeführt
Das obige ist der detaillierte Inhalt vonDetaillierte Beschreibung der Reihenfolge der Initialisierung und Ausführung von statischen Mitgliedern, statischen Codeblöcken, gewöhnlichen Mitgliedern, gewöhnlichen Codeblöcken und Konstruktormethoden von Java-Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!