前言
我们都知道,在类加载的时候,会先加载静态变量和静态的代码块,接下来才是动态变量和构造方法。那么在涉及到父子类的情况下,也是一样的,区别就在于多了父子类继承这一层关系,具体的加载顺序如下:
父子类继承
1、先加载父类静态(静态变量和静态代码块),具体加载顺序就是代码中的静态变量和静态代码块的书写顺序
2、加载子类的静态(静态变量和静态代码块)
3、(在执行new对象之前,父子类中的动态属性和构造方法都不执行)在执行子类构造方法的之前,会先执行父类的动态属性和父类构造方法,然后执行子类动态属性和子类构造方法(执行子类构造方法时,必定会先执行父类构造方法,这一点和父子类中的方法有所区别,当调用父类中的某个方法时,如果子类对这个方法进行了重写,那么会先调用子类的方法),构造方法不会被重写,所以在调用子类构造方法创建新对象的时候必定会先执行父类的构造方法(例如子类构造方法中的super())。
注:静态是在类加载的时候执行,非静态是在new 之前的准备工作,要在执行构造方法前将属性都准备好。
总结:加载顺序:父静态->子静态->父非静态->父构造->子非静态->子构造