Heim  >  Artikel  >  Java  >  Wann werden Java-Klassen geladen?

Wann werden Java-Klassen geladen?

(*-*)浩
(*-*)浩Original
2019-11-13 11:36:174213Durchsuche

Wann werden Java-Klassen geladen?

Wann wird die Klasse geladen? Im chinesischen Stil [eifrig laden] (Laden, solange andere Klassen darauf verweisen) oder verzögertes Laden [Lazy Load] (Warten). bis die Klasseninitialisierung vor dem Laden erfolgt). (Empfohlenes Lernen:

Java-Kurs

) Aber ich glaube, dass dies mit verschiedenen JVM-Implementierungen zusammenhängt, aber es wird von JLS garantiert (nur wenn eine statische Initialisierung erforderlich ist). geladen).

Wann wird die Klasse initialisiert?

Nachdem die Klasse geladen wurde, erfolgt die Initialisierung der Klasse, was bedeutet, dass alle statischen Mitglieder der Klasse initialisiert werden . Eine Klasse wird in den folgenden Situationen initialisiert:Instanzen werden mit dem Schlüsselwort new() oder der Reflektion class.forName() erstellt, es kann jedoch zu einer ClassNotFoundException kommen.

Die statische Methode der Klasse wird aufgerufen

Das statische Feld der Klasse wird zugewiesen

Auf das statische Feld wird zugegriffen und es ist keine Konstante

Ausgeführt in der obersten Klasse Die Assertion-Anweisung

Reflection kann auch eine Klasse initialisieren, da einige Methoden im Paket java.lang.reflect strikt besagen: Eine Klasse wird für keine initialisiert aus einem anderen als dem oben genannten Grund.

Wie eine Klasse initialisiert wird

Jetzt wissen wir, wann die Initialisierung einer Klasse ausgelöst wird, es ist genau in der Java-Sprachspezifikation geschrieben. Aber verstehen Sie klar die Felder (Felder, statisch oder nicht statisch), Blöcke (statisch oder nicht statisch), verschiedene Klassen (Unterklassen und Oberklassen) und verschiedene Schnittstellen (Unterschnittstellen, Implementierungsklassen und Superschnittstellen). Die Reihenfolge der Initialisierung ist auch wichtig für Klassen.

Tatsächlich basieren viele Kernfragen zu Java-Interviews und SCJP-Fragen auf diesen Konzepten. Hier sind einige Regeln für die Klasseninitialisierung:

Sequentielle Initialisierung von Klassen von oben nach unten , sodass oben deklarierte Felder früher initialisiert werden als Felder untenSuperklassen werden früher initialisiert als Unterklassen und abgeleitete Klassen

Wenn die Initialisierung einer Klasse durch den Zugriff auf eine statische Klasse ausgelöst wird Feld, dann wird nur die Klasse initialisiert, die das statische Feld deklariert, und löst weder die Initialisierung der Oberklasse noch die Initialisierung der Unterklasse aus, selbst wenn das statische Feld von einer Unterklasse oder Unterschnittstelle oder deren Implementierungsklasse referenziert wird.

Die Schnittstelleninitialisierung führt nicht zur Initialisierung der übergeordneten Schnittstelle.

Statische Felder werden während der statischen Initialisierung der Klasse initialisiert, und nicht statische Felder werden während der Erstellung von Instanzen der Klasse initialisiert. Dies bedeutet, dass statische Felder vor nicht statischen Feldern initialisiert werden.

Nichtstatische Felder werden über den Konstruktor initialisiert, bevor sie eine Initialisierung durchführen. Dadurch wird sichergestellt, dass nichtstatische Variablen oder Instanzvariablen (übergeordnete Klasse) initialisiert werden früher als die Kinderklasse

Das obige ist der detaillierte Inhalt vonWann werden Java-Klassen geladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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