我无法弄清楚为什么这段代码:
class HelloWorld
{
HelloWorld()
{
System.out.println("1 cnstr ");
}
public static void main(String[] args)
{
HelloWorld a = new HelloWorld();
}
{
System.out.println("2 cnstr ");
}
}
给我输出:
2 cnstr
1 cnstr
为什么行System.out.println("2 cnstr ");
有效?它是什么类型的块?我使用jdb
并发现JVM
在HelloWorld()
构造函数中的任何一行之前开始阻止此行。
感谢您的帮助。
答案 0 :(得分:6)
{
System.out.println("2 cnstr ");
}
实例初始化块。它在类的构造函数执行之前运行。
Java编译器将初始化程序块复制到每个构造函数中。 因此,这种方法可用于共享一段代码 多个构造函数。
答案 1 :(得分:5)
它是一个实例初始化块,在每个构造函数之前执行。