Java构造函数问题

Java构造函数问题,java,constructor,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 ");

我不明白为什么会出现这种代码:

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
为什么line System.out.println2 cnstr;工作这是什么样的街区?我使用了jdb,发现JVM在HelloWorld构造函数中的任何一行之前都以这一行开始块

谢谢你的帮助

{
        System.out.println("2 cnstr ");
    }
它是一个实例初始化块。它在类的构造函数执行之前运行

发件人:

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

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

发件人:

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


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

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

构造函数或整个类的初始化块?该类的每个构造函数中都使用这种块。构造函数或整个类的初始化块?此类块用于该类的每个构造函数中。您还可以使用静态{}来初始化在构造函数外部声明的静态变量。您还可以使用静态{}来初始化在构造函数外部声明的静态变量。