没有名字的Java构造函数?

没有名字的Java构造函数?,java,constructor,Java,Constructor,当我运行以下代码时,我得到的输出是: static block TEst block main block 字符串“测试块”是如何打印的?它被认为是构造函数吗 public class TestBlk { static { System.out.println("static block"); } { System.out.println("TEst block"); } public static void main(String args[]){ TestB

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

static block
TEst block
main 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");

}
}
它是一个实例初始化器和一个默认构造函数

没有显式构造函数的类被赋予了一个合成的、公共的、无参数的构造函数

没有调用
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");
    }
}

当您调用
newtestblk()

时,它作为对象构造的一部分被调用,您在这里拥有的东西被称为:初始化块

初始化块是一个 执行的大括号之间的代码 在类的对象 创造

有两种类型的初始化块:

  • 非静态初始化块

    {
    系统输出打印LN(“试块”);
    }

  • 静态初始化块

    静态
    {
    System.out.println(“静态块”);
    }

  • 更具体地说,我喜欢以下方面的解释:

    请注意,任何初始化块 执行类中存在的 在构造函数之前

    现在问题来了,为什么我们需要 构造函数如果我们有初始化块。答案是我们不需要默认值 构造函数但初始化块 无法参数化,因此 不能让对象从中获取值 外侧和so初始化块 不是构造函数的替代品

    这是一个初始化块。看我的

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