java的成员变量赋值和构造方法哪个先执行?
代码如下,我们关注下成员变量p和构造方法VarInitTest()哪个先执行。
public class VarInitTest {
class Person {
String name;
int age;
public Person() {
System.out.println("成员变量p开始初始化");
}
}
Person p = new Person(); //成员变量p
public VarInitTest() { //构造方法
System.out.println("VarInitTest构造方法执行");
p.name = "xx";
p.age = 25;
}
public static void main(String[] args) {
System.out.println("main()方法开始执行");
VarInitTest test = new VarInitTest();
System.out.println(test.p.name);
}
}

从图中可以看出,程序执行正常结束,没有抛出空指针异常,说明构造器VarInitTest()执行时,成员变量p已经被赋值了。输出日志也显示成员变量p先赋值,后面才调用构造器。
执行顺序:
初始化父类成员变量(我们常说的赋值语句)
初始化父类构造函数
初始化子类成员变量
初始化子类构造函数
静态变量和静态代码块,在类加载过程中,就已经赋值和执行了。
浙公网安备 33010602011771号