初始化顺序:
static属性/static代码块—属性/代码块—构造方法
无继承关系下 对象初始化顺序案例在这里插入代码片
有继承关系,初始化顺序:
1.父类static代码块——子类static代码块
2.父类代码块——父类有参(无参)构造方法——子类代码块——子类有参(无参)构造方法(先父后子)
Car.java 父类
/** * 继承关系下代码的初始化顺序 * 1.优先初始化static代码块(先父后子) * 2.先父后子 父类初始化(父类代码块、父类构造方法(有参或者无参))——子类初始化(子类代码块、子类构造方法(有参或者无参)) * !!继承关系下的子类有参构造方法需要写super(x); * !!继承关系下的子类无参构造方法不需要写super(x);创建子类对象(调用子类无参构造器时)会隐式调用父类无参构造方法,即super(); */ @Setter@Getter public class Car { private String car; private String brand; static { System.out.println("父类static代码块"); } { System.out.println("父类代码块"); } public Car(int x) { System.out.println("父类有参构造方法"); } public Car() { System.out.println("父类无参构造方法"); } }
SuperCar.java 子类
public class SuperCar extends Car { static { System.out.println("子类static代码块"); } { System.out.println("子类代码块"); } public SuperCar(int x) { super(x); System.out.println("子类有参构造方法"); } public SuperCar() { System.out.println("子类无参构造方法"); // TODO Auto-generated constructor stub } }
cartest.java 测试代码
class cartest { @Test void test() { Car c= new SuperCar(3); Car ca=new SuperCar(); System.out.println(c); System.out.println(ca); } }
执行结果