根据java doc,在初始化类时执行静态块。
当我在代码下面运行时,有人可以告诉我为什么不执行静态块?
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();
}
}
答案 0 :(得分:2)
引用A.class
不会导致执行A
的静态初始值设定项,请参阅here
类的初始化包括执行其静态 初始化器和静态字段的初始化器(类变量) 在课堂上宣布。
并且
类或接口类型T将在紧接之前初始化 首次出现以下任何一种情况:
T是一个类,并创建了一个T实例。
调用T声明的静态方法。
分配由T声明的静态字段。
使用T声明的静态字段,该字段不是常量 变量(§4.12.4)。
答案 1 :(得分:1)
类的静态初始化通常在之前发生 第一次发生以下事件之一:
- 创建了一个类的实例,
- 调用类的静态方法
- 分配了类的静态字段,
- 使用非常数静态字段,或[...]
您目前没有做以上任何一项。 所以,通过替换
Class<?> class1 = A.class;
System.out.println(class1);
以此为例
A object = new A();
会给你你的结果。