


Analyse der Ladereihenfolge von Klassen in Java (häufig in Interviewfragen verwendet)
Dies ist eigentlich eine schriftliche Testfrage von Alibaba, die mir letztes Jahr bei der Rekrutierung von Schulen begegnet ist (ich gebe zu, sie ist etwas alt -.-). Nun, wenn ich mich richtig erinnere, war es eine optionale Hauptfrage in Richtung Java. Natürlich ist die Bedeutung der Frage nicht so einfach. Die Frage erfordert lediglich, dass Sie die Ausgabeergebnisse aller System.out.println schreiben, nachdem das Programm ausgeführt wurde, und die unterschiedliche Ausführungsreihenfolge Jedes System.out.println führt zur endgültigen Programmausgabe. Die Ergebnisse sind ebenfalls unterschiedlich.
Ich kann mich definitiv nicht an die spezifische Frage erinnern, aber wir können die Frage direkt ändern, wenn es in Klasse A statische Variablen, statische Anweisungsblöcke, nicht statische Variablen, nicht statische Anweisungsblöcke und Konstruktoren gibt und Klasse B, statische Methode, nicht statische Methode, und Klasse A erbt Klasse B. Wie ist die Ladereihenfolge innerhalb der Klasse beim Instanziieren von A?
Ich war damals auch verwirrt und habe eine geschrieben Nach einer kleinen Demo kenne ich nun die tatsächliche Ladesequenz innerhalb der Klasse:
Klasse B:
public class B{ //静态变量 static int i=1; //静态语句块 static { System.out.println("Class B1:static blocks"+i); } //非静态变量 int j=1; //静态语句块 static{ i++; System.out.println("Class B2:static blocks"+i); } //构造函数 public B(){ i++; j++; System.out.println("constructor B: "+"i="+i+",j="+j); } //非静态语句块 { i++; j++; System.out.println("Class B:common blocks"+"i="+i+",j="+j); } //非静态方法 public void bDisplay(){ i++; System.out.println("Class B:static void bDisplay(): "+"i="+i+",j="+j); return ; } //静态方法 public static void bTest(){ i++; System.out.println("Class B:static void bTest(): "+"i="+i); return ; } }
Klasse A:
public class A extends B{ //静态变量 static int i=1; //静态语句块 static { System.out.println("Class A1:static blocks"+i); } //非静态变量 int j=1; //静态语句块 static{ i++; System.out.println("Class A2:static blocks"+i); } //构造函数 public A(){ super(); i++; j++; System.out.println("constructor A: "+"i="+i+",j="+j); } //非静态语句块 { i++; j++; System.out.println("Class A:common blocks"+"i="+i+",j="+j); } //非静态方法 public void aDisplay(){ i++; System.out.println("Class A:static void aDisplay(): "+"i="+i+",j="+j); return ; } //静态方法 public static void aTest(){ i++; System.out.println("Class A:static void aTest(): "+"i="+i); return ; } }
Class ClassLoading:
public class ClassLoading { public static void main (String args[]) { A a=new A(); a.aDisplay(); } }
Das Ergebnis der Programmausführung ist wie in der Abbildung dargestellt:
Durch das obige Diagramm haben wir Sie können den gesamten Ladevorgang der Java-Klasse deutlich sehen.
1. Wenn Sie Klasse A laden möchten, laden Sie zuerst die statischen Variablen und statischen Anweisungsblöcke ihrer übergeordneten Klasse B (Objekt) (die Ausführungsreihenfolge entspricht der Reihenfolge der Anordnung).
2. Laden Sie dann die statischen Variablen und statischen Anweisungsblöcke der Ausführungsklasse A. (Und die Schritte 1 und 2 werden nur einmal ausgeführt)
3. Wenn Sie Klasse A instanziieren müssen, rufen Sie zuerst den Konstruktor ihrer übergeordneten Klasse B auf, und bevor Sie den Konstruktor ihrer übergeordneten Klasse B aufrufen, rufen Sie die Nicht-Klasse auf. statische Variablen und nicht statische Anweisungsblöcke in der übergeordneten Klasse B. Rufen Sie abschließend den Konstruktor in der übergeordneten Klasse B zur Initialisierung auf.
4. Rufen Sie dann nacheinander die nicht statischen Variablen und nicht statischen Anweisungsblöcke in Klasse A auf. Rufen Sie schließlich den Konstruktor in A zur Initialisierung auf. (Und die Schritte 3 und 4 können wiederholt werden)
5. Statische Methoden und nicht statische Methoden sind beide passive Aufrufe, das heißt, das System ruft sie nicht automatisch auf und führt sie aus, sodass sie nicht ausgeführt werden, wenn der Benutzer dies tut Der Hauptunterschied besteht darin, dass statische Methoden direkt über den Klassennamen (oder instanziierte Objekte) aufgerufen werden können, während nicht statische Methoden erst aufgerufen werden können, nachdem das Objekt instanziiert wurde.
OK, das ist die Zusammenfassung für heute. Wenn es etwas gibt, das nicht gut oder falsch ist, können Sie es gerne darauf hinweisen und ich werde es korrigieren.
Weitere verwandte Artikel zur Ladereihenfolgeanalyse von Klassen in Java (häufig in Interviewfragen verwendet) finden Sie auf der chinesischen PHP-Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.
