Почему статический блок не выполняется
Согласно документу Java, статический блок выполняется при инициализации класса.
Может ли кто-нибудь сказать мне, почему статический блок не выполняется, когда я запускаю код ниже?
class A {
static {
System.out.println("Static Block");
}
}
public class Main {
public static void example1() {
Class<?> class1 = A.class;
System.out.println(class1);
}
public static void example2() {
try {
Class<?> class1 = Class.forName("ClassLoading_Interview_Example.ex1.A");
System.out.println(class1);
}catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
example1();
}
}
2 ответа
Статическая инициализация класса обычно происходит непосредственно перед первым случаем одного из следующих событий:
- экземпляр класса создан,
- вызывается статический метод класса,
- статическое поле класса назначено,
- используется непостоянное статическое поле, или [...]
Вы в настоящее время не делаете ничего из вышеперечисленного. Итак, заменив
Class<?> class1 = A.class;
System.out.println(class1);
с этим например
A object = new A();
даст вам ваш результат.
Привязка A.class
не приведет к выполнению A
статические инициализаторы, смотрите здесь
Инициализация класса состоит из выполнения его статических инициализаторов и инициализаторов для статических полей (переменных класса), объявленных в классе.
А также
Класс T или интерфейсный тип T будут инициализированы непосредственно перед первым появлением любого из следующего:
T является классом, и экземпляр T создан.
Статический метод, объявленный T, вызывается.
Статическое поле, объявленное T, присваивается.
Используется статическое поле, объявленное T, и поле не является константной переменной (§4.12.4).