Hvornår initialiseres statiske variabler i Java?

1. Introduktion

I denne vejledning undersøger vi den statiske variabel initialiseringsproces. Java Virtual Machine (JVM) følger denne proces under klasseindlæsning.

2. Initialiseringsproces

På et højt niveau udfører JVM følgende trin:

For det første er klassen indlæst og linket. Derefter behandler "initialiseringsfasen" i denne proces den statiske variabelinitialisering. Endelig blev vigtigste metode tilknyttet klassen kaldes.

I det næste afsnit ser vi på initialisering af klassevariabler.

3. Klassevariabel

I Java kaldes statiske variabler også klassevariabler. Det vil sige, de tilhører en klasse og ikke en særlig instans. Som resultat, klasse initialisering initialiserer statiske variabler.

I modsætning hertil initialiserer en klasses forekomst instansvariablerne (ikke-statiske variabler). Alle forekomster af en klasse deler klassens statiske variabler.

Lad os tage et eksempel på en klasse StaticVariableDemo:

offentlig klasse StaticVariableDemo {offentlig statisk int i; offentlig statisk int j = 20; offentlig StaticVariableDemo () {}}

For det første opretter JVM en Klasse objekt til klassen StaticVariableDemo. Dernæst statisk feltinitialiserere tildeler de statiske felter en meningsfuld standardværdi. I vores eksempel ovenfor klassevariablen jeg initialiseres først med en int standardværdien på nul.

Tekstordren gælder for statiske felter. Først, jeg vil initialisere og derefter j vil blive initialiseret. Efter det, klassen og dens statiske medlemmer vil være synlige for andre klasser.

4. Variabel i en statisk blok

Lad os tage et andet eksempel:

offentlig klasse StaticVariableDemo {offentlig statisk int z; statisk {z = 30; } offentlig StaticVariableDemo () {}}

I dette tilfælde vil den variable initialisering være i rækkefølge. For eksempel tildeler JVM oprindeligt variabel z til en standard int værdi på 0. Derefter i statisk blok, ændres den til 30.

5. Variabel i en statisk indlejret klasse

Lad os endelig tage et eksempel på den indlejrede klasse inde i det ydre StaticVariableDemo klasse:

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

I dette tilfælde klassen StaticVariableDemo indlæser Indlejret klasse. Det initialiserer den statiske variabel nestedClassStaticVariable.

6. Konklusion

I denne korte artikel har vi kort forklaret den statiske variabelinitialisering. For yderligere oplysninger, se Java Language Specification.

Som altid er kodestykkerne tilgængelige på GitHub.