Wann werden statische Variablen in Java initialisiert?

1. Einleitung

In diesem Tutorial werden wir den Initialisierungsprozess für statische Variablen untersuchen. Die Java Virtual Machine (JVM) folgt diesem Prozess beim Laden der Klasse.

2. Initialisierungsprozess

Auf hoher Ebene führt die JVM die folgenden Schritte aus:

Zunächst wird die Klasse geladen und verknüpft. In der Initialisierungsphase dieses Prozesses wird dann die Initialisierung der statischen Variablen verarbeitet. Schließlich ist die Haupt genannt Methode mit der Klasse verbunden.

Im nächsten Abschnitt werden wir uns die Initialisierung von Klassenvariablen ansehen.

3. Klassenvariable

In Java werden statische Variablen auch als Klassenvariablen bezeichnet. Das heißt, sie gehören zu einer Klasse und nicht zu einer bestimmten Instanz. Infolgedessen werden durch die Klasseninitialisierung statische Variablen initialisiert.

Im Gegensatz dazu initialisiert die Instanz einer Klasse die Instanzvariablen (nicht statische Variablen). Alle Instanzen einer Klasse teilen sich die statischen Variablen der Klasse.

Nehmen wir ein Beispiel für die Klasse StaticVariableDemo :

public class StaticVariableDemo { public static int i; public static int j = 20; public StaticVariableDemo() {} }

Zunächst erstellt die JVM ein Klasse - Objekt für die Klasse StaticVariableDemo . Als nächstes werden die statischen zuweisen Feld initializers einen sinnvollen Standardwert auf die statischen Felder. In unserem obigen Beispiel wird die Klassenvariable i zuerst mit einem int- Standardwert von Null initialisiert .

Die Textreihenfolge gilt für statische Felder. Zuerst i wird initialisiert und dann j initialisiert. Danach sind die Klasse und ihre statischen Elemente für andere Klassen sichtbar.

4. Variable in einem statischen Block

Nehmen wir ein anderes Beispiel:

public class StaticVariableDemo { public static int z; static { z = 30; } public StaticVariableDemo() {} }

In diesem Fall erfolgt die Variableninitialisierung nacheinander. Beispielsweise weist die JVM der Variablen z zunächst einen Standard- Int- Wert von 0 zu. Anschließend wird sie im statischen Block in 30 geändert.

5. Variable in einer statisch verschachtelten Klasse

Nehmen wir zum Schluss ein Beispiel für die verschachtelte Klasse in der äußeren StaticVariableDemo- Klasse:

public class StaticVariableDemo { public StaticVariableDemo() {} static class Nested { public static String nestedClassStaticVariable = "test"; } }

In diesem Fall lädt die Klasse StaticVariableDemo die verschachtelte Klasse. Die statische Variable nestedClassStaticVariable wird initialisiert .

6. Fazit

In diesem kurzen Artikel haben wir die Initialisierung der statischen Variablen kurz erläutert. Weitere Informationen finden Sie in der Java-Sprachspezifikation.

Wie immer sind die Codefragmente auf GitHub verfügbar.