модификатор final у поля блокирует вызов static блока
имеем код
class Test{
public static int x = 1;
static {
System.out.println("static");
}
}
public class Solution {
public static void main(String[] args) {
System.out.println(Test.x);
}
}
как и ожидается вывод
static
1
но если добавить к полю final
public static final int x = 1;
статик блок не отработает, и выведет 1 .
с чем это связано?
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
static final int - это константное выражение времени компиляции (англ. compile time constant expression).
Это означает, что во время компиляции вашего класса Solution компилятор берет константу из класса Test и прямо использует ее в Solution (и в скомпилированном классе Solution нет ссылки на класс Test). То есть при запуске класса Solution загрузка класса Test не происходит, а значит не происходит выполнение статических блоков.