Когда статические переменные инициализируются в Java?
1. Введение
В этом учебнике мы изумим статический процесс инициализации переменной. Виртуальная машина Java (JVM) следует этому процессу во время загрузки класса.
2. Процесс инициализации
На высоком уровне СПМ выполняет следующие действия:
Во-первых, класс загружается и связан. Затем “инициализация” фазы этого процесса обрабатывает статическую инициализацию переменной. Наконец, основные метод, связанный с классом, называется.
В следующем разделе мы посмотрим на инициализацию переменной класса.
3. Переменный класс
В Java статические переменные также называются переменными классов. То есть они принадлежат к классу, а не к конкретному экземпляру. В результате инициализация класса будет инициализировать статические переменные.
Напротив, экземпляр класса будет инициализировать переменные экземпляра (не статические переменные). Все экземпляры класса разделяют статические переменные класса.
Возьмем пример класса StaticVariableDemo :
public class StaticVariableDemo { public static int i; public static int j = 20; public StaticVariableDemo() {} }
Во-первых, СПМ создает Класс объект для класса StaticVariableDemo . Далее, статические инициализаторы поля присваивают значимое значение по умолчанию статическим полям. В нашем приведенном выше примере переменная Я сначала инициализируется с int значение по умолчанию нулевого .
Текстовый порядок применяется к статическим полям. Во-первых, Я будет инициализировать, а затем j будут инициализированы. После этого , класс и его статические участники будут видны другим классам.
4. Переменный в статическом блоке
Возьмем другой пример:
public class StaticVariableDemo { public static int z; static { z = 30; } public StaticVariableDemo() {} }
В этом случае переменная инициализация будет последовательной. Например, СПМ изначально присваивает переменную z по умолчанию int значение 0. Затем, в статические блок, он изменен на 30.
5. Переменный в статичном гнездовом классе
Наконец, давайте возьмем пример вложенного класса внутри внешней StaticVariableDemo класс:
public class StaticVariableDemo { public StaticVariableDemo() {} static class Nested { public static String nestedClassStaticVariable = "test"; } }
В этом случае класс StaticVariableDemo загружает Вложенные класс. Это будет инициализировать статическую переменную вложенныйКлассСтатикВарийный .
6. Заключение
В этой короткой статье мы кратко объяснили статическую инициализацию переменной. Для получения более подробной информации, Спецификация языка Java .
Как всегда, фрагменты кода доступны на GitHub .