问题
在Java中,如果初始化块在构造函数之后出现,是会先执行构造函数还是初始化块?
结论
先直接给结论:初始化块无论在哪里出现,都会先于构造函数执行,初始化块的执行顺序就是在代码中的先后顺序
测试代码
public class InitialClock {
private String name;
private int age;
{
name = "hhh";
age = 23;
System.out.println(name + " " + age);
System.out.println("我是构造函数之前的初始化块");
}
public InitialClock() {
}
public InitialClock(String name, int age) {
this.name = name;
this.age = age;
System.out.println(name + " " + age);
System.out.println("我是构造函数");
}
{
name = "ccc";
age = 24;
System.out.println(name + " " + age);
System.out.println("我是构造函数之后的初始化块");
}
public static void main(String[] args) {
InitialClock test = new InitialClock("123", 45);
}
}
运行截图
可以看到,初始化块不论是在构造函数之前还是之后,都是先于构造函数执行的。