新建对象时,构造方法、变量、代码块执行顺序

场景一:没有父类,或者不关心父类

静态成员(静态代码块、静态变量,按代码顺序执行)
非静态成员(非静态代码块、非静态变量,按代码顺序执行)
构造方法

场景二:有父类
父类静态成员(静态代码块、静态变量,按代码顺序执行)
子类静态成员(同上)
父类非静态成员(非静态代码块、非静态变量,按代码顺序执行)
父类构造方法
子类非静态成员(非静态代码块、非静态变量,按代码顺序执行)
子类构造方法

场景三:不关心父类,且静态成员中调用了构造方法
假设静态成员最多可分解为三句代码,按代码顺序分为1、2、3,其中2调用了构造方法,则执行顺序为:

静态成员1
静态成员2
非静态成员(非静态代码块、非静态变量,按代码顺序执行)
构造方法
静态成员3

注意
1、静态成员只在类初始化时执行一次
2、每创建一个对象,非静态成员和构造方法都会执行一次

Java类的加载机制(类加载和初始化顺序)

你可能感兴趣的:(新建对象时,构造方法、变量、代码块执行顺序)