当我运行此代码时,它输出blockA blockB blockA
。
我希望输出是blockB blockA blockA
。
为什么输出blockA blockB blockA
,而不是blockB blockA blockA
?
public class Test
{
public static Test t1 = new Test();
{
System.out.println("blockA");
}
static
{
System.out.println("blockB");
}
public static void main(String[] args)
{
Test t2 = new Test();
}
}
最佳答案
在课堂上,您首先添加了以下语句。
public static Test t1 = new Test();
因此它将是执行类的初始值设定项
{
System.out.println("blockA");
}
因此,将打印blockA。
然后执行静态初始化程序
static
{
System.out.println("blockB");
}
并打印出blockB
最后执行主函数中的代码
Test t2 = new Test();
这将再次触发类初始化器
{
System.out.println("blockA");
}
因此再次打印blockA。
关于类和静态初始化程序的执行顺序的详细说明在此处jls-12.4.2
关于java - 意外的Java文本输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46024762/