Кога се инициализират статични променливи в Java?

1. Въведение

В този урок ще изследваме процеса на инициализация на статичната променлива. Виртуалната машина Java (JVM) следва този процес по време на зареждането на класа.

2. Процес на инициализация

На високо ниво JVM извършва следните стъпки:

Първо, класът се зарежда и свързва. След това фазата „инициализиране“ на този процес обработва инициализацията на статичната променлива. Накрая се извиква основният метод, свързан с класа.

В следващия раздел ще разгледаме инициализацията на променлива на класа.

3. Променлива на класа

В Java статичните променливи също се наричат ​​променливи на класа. Тоест, те принадлежат към клас, а не към определен екземпляр. В резултат на това инициализацията на класа ще инициализира статични променливи.

За разлика от това, екземпляр на клас ще инициализира променливите на екземпляра (нестатични променливи). Всички екземпляри на клас споделят статичните променливи на класа.

Да вземем пример за клас StaticVariableDemo :

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

Първо, JVM създава обект клас за класа StaticVariableDemo . След това инициализаторите на статични полета присвояват значима стойност по подразбиране на статичните полета. В нашия пример по-горе променливата на класа i първо се инициализира със стойност по подразбиране int нула .

Текстовият ред се прилага за статични полета. На първо място, аз ще се инициализира и след това й ще се инициализира. След това , класа и нейните статични членове ще се виждат от други класове.

4. Променлива в статичен блок

Да вземем друг пример:

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

В този случай инициализацията на променливата ще бъде в последователност. Например JVM първоначално присвоява променлива z на стойност по подразбиране int от 0. След това в статичния блок тя се променя на 30.

5. Променлива в статичен вложен клас

И накрая, нека вземем пример за вложения клас във външния клас StaticVariableDemo :

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

В този случай, най-клас StaticVariableDemo натоварвания на Вложени клас. Той ще инициализира статичната променлива nestedClassStaticVariable .

6. Заключение

В тази кратка статия обяснихме накратко инициализацията на статичната променлива. За повече подробности проверете спецификацията на езика Java.

Както винаги, кодовите фрагменти са достъпни в GitHub.