Статический инициализатор
Статический инициализатор - это специальный блок кода
внутри класса, который выполняется автоматически
один раз при первой загрузке класса в память
виртуальной машиной Java. Он обозначается ключевым
словом static и фигурными скобками. Внутри
этого блока мы можем инициализировать статические
поля класса, выполнять вычисления или вызывать
другие методы. Статический инициализатор не имеет
параметров и не может быть вызван напрямую.
В одном классе можно объявить несколько статических инициализаторов - они выполняются в том порядке, в котором записаны в коде.
Синтаксис
public class MyClass
{
static
{
// код инициализации
}
}
Пример
Давайте создадим класс со статическим инициализатором, который задаёт значение статического поля:
public class Main
{
static int num;
static
{
num = 42;
System.out.println("Static init: num = " + num);
}
public static void main(String[] args)
{
System.out.println("Main: num = " + num);
}
}
Результат выполнения кода:
"Static init: num = 42"
"Main: num = 42"
Пример
Давайте убедимся, что статический инициализатор выполняется только один раз, даже если создать несколько объектов класса:
public class Main
{
static int counter;
static
{
counter++;
System.out.println("Init called: " + counter);
}
public Main()
{
System.out.println("Constructor called");
}
public static void main(String[] args)
{
new Main();
new Main();
new Main();
}
}
Результат выполнения кода:
"Init called: 1"
"Constructor called"
"Constructor called"
"Constructor called"
Пример
Давайте используем статический инициализатор для заполнения статической коллекции:
import java.util.List;
import java.util.ArrayList;
public class Main
{
static List<String> res;
static
{
res = new ArrayList<>();
res.add("a");
res.add("b");
res.add("c");
}
public static void main(String[] args)
{
System.out.println(res);
}
}
Результат выполнения кода:
[a, b, c]
Смотрите также
-
ключевое слово
static,
которое создаёт статические поля и методы -
инициализатор экземпляра
instance init,
который выполняется при создании объекта -
конструктор класса
constructor,
который вызывается при создании объекта -
ключевое слово
final,
которое запрещает изменение поля