1、创建一个对象时,在一个类的调用顺序是:
第一步: 调用静态代码块和静态属性初始化(注意:静态代码块 和 静态属性初始化调用的优先级一样,如果有多个静态代码块和静态属性初始化,则按它们定义的顺序从上往下调用)。
第二步: 调用普通代码块和普通属性的初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和普通属性初始化,则按它们定义的顺序从上往下调用)。
第三步: 调用构造方法 (构造器)。
2、构造器方法体里的最前面其实隐含了 super() 和 调用普通代码块,所以在调用构造器创建对象时,先调用 super() 和 普通代码块 。
3、创建一个子类对象时(继承关系),他们的静态代码块、静态属性初始化,普通代码块、普通属性初始化,构造器的调用顺序如下 ↓
第一步: 调用父类的静态代码块 和 静态属性(优先级一样,按照定义顺序从上往下执行)。
第二步: 调用子类的静态代码块 和 静态属性(优先级一样,按照定义顺序从上往下执行)。
第三步: 调用父类的普通代码块 和 普通属性(优先级一样,按照定义顺序从上往下执行)。
第四步: 调用父类的构造方法 。
第五步: 调用子类的普通代码块 和 普通属性(优先级一样,按照定义顺序从上往下执行)。
第六步: 调用子类的构造方法 。