Java构造函数问题

时间:2013-01-06 11:35:58

标签: java constructor

我无法弄清楚为什么这段代码:

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并发现JVMHelloWorld()构造函数中的任何一行之前开始阻止此行。

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

{
        System.out.println("2 cnstr ");
    }

实例初始化块。它在类的构造函数执行之前运行。

来自Documentation

  

Java编译器将初始化程序块复制到每个构造函数中。   因此,这种方法可用于共享一段代码   多个构造函数。

答案 1 :(得分:5)

它是一个实例初始化块,在每个构造函数之前执行。