测试代码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文件,如下:
从编译后的结果来看,只有无参构造方法中被插入了构造代码块,所以编译器确保了每个构造函数只能执行一次构造代码块。
总结
有参调用无参方法,构造代码块也只会执行一次。