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);
    }
}

image

从图中可以看出,程序执行正常结束,没有抛出空指针异常,说明构造器VarInitTest()执行时,成员变量p已经被赋值了。输出日志也显示成员变量p先赋值,后面才调用构造器。

执行顺序:

初始化父类成员变量(我们常说的赋值语句)
初始化父类构造函数
初始化子类成员变量
初始化子类构造函数

静态变量和静态代码块,在类加载过程中,就已经赋值和执行了。

posted @ 2023-07-06 18:42  张晋1116  阅读(157)  评论(0)    收藏  举报