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.


$config[zx-auto] not found$config[zx-overlay] not found