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