Mikor inicializálják a statikus változókat a Java-ban?
1. Bemutatkozás
Ebben az oktatóanyagban feltárjuk a statikus változó inicializálási folyamatát. A Java virtuális gép (JVM) ezt a folyamatot követi az osztálybetöltés során.
2. Inicializálási folyamat
Magas szinten a JVM a következő lépéseket hajtja végre:
Először az osztály betöltődik és összekapcsolódik. Ezután ennek a folyamatnak az „inicializálása” szakasza feldolgozza a statikus változó inicializálását. Végül a fő- osztályhoz társított metódust hívjuk.
A következő szakaszban megvizsgáljuk az osztályváltozók inicializálását.
3. Osztály változó
A Java-ban a statikus változókat osztályváltozóknak is nevezik. Vagyis egy osztályhoz tartoznak, és nem egy adott példányhoz. Ennek eredményeként Az osztály inicializálása inicializálja a statikus változókat.
Ezzel szemben egy osztály példánya inicializálja a példányváltozókat (nem statikus változók). Az osztály összes példánya megosztja az osztály statikus változóit.
Vegyünk egy példát az osztályra StaticVariableDemo:
StaticVariableDemo {public static int i nyilvános osztály; nyilvános statikus int j = 20; public StaticVariableDemo () {}}
Először a JVM létrehoz egy Osztály objektum az osztály számára StaticVariableDemo. Ezután a statikus a mező inicializátorai értelmes alapértelmezett értéket rendelnek a statikus mezőkhöz. A fenti példánkban az osztályváltozó én először egy int alapértelmezett értéke nulla.
A szöveges sorrend statikus mezőkre vonatkozik. Első, én inicializálni fogja, majd j inicializálásra kerül. Utána, az osztály és annak statikus tagjai láthatók lesznek más osztályok számára is.
4. Változó statikus blokkban
Vegyünk egy másik példát:
Public class StaticVariableDemo {public static int z; statikus {z = 30; } public StaticVariableDemo () {}}
Ebben az esetben a változó inicializálása sorrendben történik. Például a JVM kezdetben hozzárendeli a változót z alapértelmezettre int értéke 0. Ezután a statikus blokk, 30-ra változik.
5. Változó egy statikus beágyazott osztályban
Végül vegyünk egy példát a beágyazott osztályra a külső részen StaticVariableDemo osztály:
public class StaticVariableDemo {public StaticVariableDemo () {} static class Nested {public static String nestedClassStaticVariable = "test"; }}
Ebben az esetben az osztály StaticVariableDemo betölti a Beágyazott osztály. Inicializálja a statikus változót nestedClassStaticVariable.
6. Következtetés
Ebben a rövid cikkben röviden ismertettük a statikus változó inicializálását. További részletekért ellenőrizze a Java nyelvi specifikációt.
Mint mindig, a kódrészletek is elérhetők a GitHubon.