初始化程序块未执行

时间:2016-08-25 13:30:23

标签: java

在下面的代码中为什么没有调用初始化程序块?但是如果main()从这个类中删除,并且从另一个类加载它,则执行初始化程序块。

public class AAStatic {
static String s = "a";

{
    System.out.println("hi");
    m1();
}
public static void main(String[] args) {
    m1();
    System.out.println(s);
}

static{
    m1();
}
static void m1(){
    s+="b";
}
}

2 个答案:

答案 0 :(得分:1)

因为您没有创建AAStatic类的任何实例。初始化程序块在构造函数代码之前执行(即使您没有编写显式构造函数隐式构造函数)。

您可以将static添加到初始化程序,然后在加载类时执行它。

答案 1 :(得分:1)

有两种类型的初始化程序块。

statc的{​​{1}}

Static Initialization Blocks

因此,它将在您第一次使用该类时调用,以便它可用于初始化您的类。

没有static{ m1(); } 的那个是初始化实例。因此,您不会创建任何static不会调用该块的实例。尝试:

AAStatic

参考: