为什么不执行静态块



根据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();
    }
}

类的静态初始化通常发生在紧接之前 首次发生以下事件之一时:

  • 创建类的实例,
  • 调用类的静态方法,
  • 分配了类的静态字段,
  • 使用非常量静态场,或 [...]

您当前未执行上述任何操作。因此,通过替换

Class<?> class1 = A.class;
System.out.println(class1);

以这个为例

A object = new A();

会给你结果。

引用A.class不会导致执行A的静态初始值设定项,请参见此处

类的初始化包括执行其静态 静态字段(类变量(的初始值设定项和初始值设定项 在类中声明。

类或接口类型 T 将在 首次出现以下任一情况:

T

是一个类,创建 T 的实例。

调用 T 声明的静态方法。

分配由 T 声明的静态字段。

使用 T 声明的静态字段,并且该字段不是常量 变量 (§4.12.4(。

相关内容

  • 没有找到相关文章

最新更新