没有名字的Java构造函数?

sab*_*sab 1 java constructor

当我运行以下代码时,我得到的输出为:

static block
TEst block
main block
Run Code Online (Sandbox Code Playgroud)

如何打印字符串"TEst block"?它被视为构造函数吗?

public class TestBlk {

static {
    System.out.println("static block");
}

{
    System.out.println("TEst block");
}


public static void main(String args[]){
    TestBlk blk=new TestBlk();
    System.out.println("main block");

}
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*ine 12

它是一个实例初始化器,以及一个默认构造函数.

没有显式构造函数的类被赋予合成的,public,no-args构造函数.

没有调用this()super()(可能带参数)的构造函数被赋予一个隐式调用super()(没有参数,可能是内部类发生了奇怪的事情).

在隐式或显式调用之后super(),字段初始化程序和实例初始化程序中的所有代码都会按照它在源代码中出现的顺序插入.

所以在javac完成你的代码后,它看起来有点像:

public class TestBlk {

    static {
        System.out.println("static block");
    }

    public TestBlk() {
        // Call constructor of java.lang.Object.
        super();

        // From instance (and field)initialiser.
        System.out.println("TEst block");

        // Rest of constructor:
    }


    public static void main(String args[]){
        TestBlk blk = new TestBlk();
        System.out.println("main block");
    }
}
Run Code Online (Sandbox Code Playgroud)