1. Initialisierung der Klasse
Für die Klasseninitialisierung: Die Klasseninitialisierung wird im Allgemeinen nur einmal initialisiert, und die Klasseninitialisierung initialisiert hauptsächlich statische Mitgliedsvariablen.
Die Kompilierung einer Klasse bestimmt den Initialisierungsprozess der Klasse.
Die vom Compiler generierte Klassendatei nimmt hauptsächlich die folgenden Änderungen an den in der Quelldatei definierten Klassen vor:
1) Deklarieren Sie zunächst Mitgliedsvariablen innerhalb der Klasse in der Reihenfolge, in der statische Mitgliedsvariablen definiert werden.
2) Initialisieren Sie gemäß der Initialisierungssequenz der Mitgliedsvariablen in der ursprünglichen Java-Klasse.
Die entsprechende Konvertierung zwischen einer Java-Klasse und der kompilierten Klasse lautet wie folgt:
Quelldatei:
Kopieren Sie den Codecode wie folgt:
Person der öffentlichen Klasse{
public static String name="Zhang San";
öffentliches statisches Int-Alter;
statisch{
Alter=20;
System.out.println("Initialisierungsalter");
}
öffentliche statische String-Adresse;
statisch{
Adresse="Peking";
Alter=34;
}
public static void main(String[] args) {
System.out.println(name);
System.out.println(age);
System.out.println(address);
}
}
Wenn der Java-Quellcode in eine Klassendatei konvertiert wird, wird er in einen Code ähnlich dem folgenden umgewandelt:
Kopieren Sie den Codecode wie folgt:
Person der öffentlichen Klasse{
öffentlicher statischer String-Name;
öffentliches statisches Int-Alter;
öffentliche statische String-Adresse;
statisch{
name="Zhang San";
Alter=20;
System.out.println("Initialisierungsalter");
Adresse="Peking";
Alter=34;
}
public static void main(String[] args) {
System.out.println(name);
System.out.println(age);
System.out.println(address);
}
}
Die Initialisierungssequenz wird sequentiell entsprechend der Initialisierungssequenz der entsprechenden Klassenmitgliedsvariablen nach der Konvertierung ausgeführt, sodass alle statischen Mitgliedsvariablen zuerst deklariert und dann zugewiesen werden und die Reihenfolge der Zuweisung auch auf der Reihenfolge der statischen Mitgliedsvariablen basiert Im Quellcode initialisiert. Hinweis: Das Definieren und Initialisieren einer Mitgliedsvariablen entspricht dem Initialisieren in einem statischen Codeblock, beides in der Reihenfolge, in der sie im Quellcode definiert sind.
2. Generierung von Objekten
Der Initialisierungsprozess für die Objektgenerierung ähnelt dem Initialisierungsprozess einer Klasse, es wird jedoch eine Konstruktorphase hinzugefügt. Der Quellcode lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
Person der öffentlichen Klasse{
{
name="李思";
Alter=56;
System.out.println("Initialisierungsalter");
Adresse="Shanghai";
}
public String name="Zhang San";
öffentliches Int Alter=29;
public String address="Peking";
öffentliche Person(){
name="Zhao Liu";
Alter=23;
Adresse="Shanghai";
}
}
Nachdem der Compiler es in eine Klassendatei konvertiert hat, wird es in Code ähnlich dem folgenden umgewandelt:
Kopieren Sie den Codecode wie folgt:
Person der öffentlichen Klasse{
öffentlicher String-Name;
öffentliches Int-Alter;
öffentliche String-Adresse;
öffentliche Person(){
name="李思";
Alter=56;
System.out.println("Initialisierungsalter");
Adresse="Shanghai";
name="Zhang San";
Alter=29;
Adresse="Peking";
name="Zhao Liu";
Alter=23;
Adresse="Shanghai";
}
}
Es ist ersichtlich, dass die Initialisierung der Mitgliedsvariablen in der Klasse und der Code im Codeblock alle in den Konstruktor verschoben wurden und die Mitgliedsvariablen nacheinander gemäß der Initialisierungsreihenfolge der Java-Quelldatei initialisiert werden, während der Code in der ursprüngliche Konstruktor Es wird zur letzten Ausführung des Konstruktors verschoben. Ich hatte noch nie ein tiefes Verständnis für den Klasseninitialisierungsprozess. Ich konnte mich nur an die Initialisierungssequenz gemäß dem Buch erinnern, aber ich habe sie nach einer Weile vergessen Ich habe es endlich herausgefunden. Es ist besser, den Initialisierungsmechanismus anhand eines Modells zu erklären. Nur wenn Sie es verstehen, können Sie es nicht mehr vergessen.