1

我不知道为什么这段代码:

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()

谢谢你的帮助。

4

2 回答 2

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

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

文档

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

于 2013-01-06T11:36:47.710 回答
5

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

于 2013-01-06T11:37:52.020 回答