在下面的代码中为什么没有调用初始化程序块?但是如果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";
}
}
答案 0 :(得分:1)
因为您没有创建AAStatic
类的任何实例。初始化程序块在构造函数代码之前执行(即使您没有编写显式构造函数隐式构造函数)。
您可以将static
添加到初始化程序,然后在加载类时执行它。
答案 1 :(得分:1)
有两种类型的初始化程序块。
statc
的{{1}}
Static Initialization Blocks
因此,它将在您第一次使用该类时调用,以便它可用于初始化您的类。
没有static{
m1();
}
的那个是初始化实例。因此,您不会创建任何static
不会调用该块的实例。尝试:
AAStatic
参考: