有参构造函数调用无参构造函数,构造代码块会执行两次么?

测试代码demo:

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 有参调用无参方法,构造代码块会执行两次么?
 */
public class BuildingCodeBlocksTest {

    private String name;

    static AtomicInteger i = new AtomicInteger(0);

    {
        System.out.println("构造代码块执行" + i.incrementAndGet() + "次");
    }

    public BuildingCodeBlocksTest() {
    }

    public BuildingCodeBlocksTest(String name) {
        this();
        this.name = name;
    }

    public static void main(String[] args) {
        new BuildingCodeBlocksTest("测试");
    }
}

运行结果:
在这里插入图片描述
从运行结果可以发现,每个构造函数只会执行一次构造代码块。

看下编译后的class文件,如下:
在这里插入图片描述
从编译后的结果来看,只有无参构造方法中被插入了构造代码块,所以编译器确保了每个构造函数只能执行一次构造代码块。

总结

有参调用无参方法,构造代码块也只会执行一次。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/108338313