初始化块:不使用static修饰的代码块
静态初始化块:使用static修饰的代码块
初始化块:它是相当于对构造器的补充,用于创建对象时给对象的初始化,在构造器之前执行;如果一段初始化代码块对所有构造器完全相同,且无需接收参数,就可以将其提取到非静态初始化代码块中;经过编译后,非静态块已经添加到构造器中,且位于所有构造器代码的前面。
静态初始化块:静态初始化块用static修饰,又叫类初始化块;静态初始化块负责对类进行初始化,因此类初始化块是在类初始化阶段就执行;静态块和静态方法一样,不能访问非静态成员;静态块是在类的初始化阶段完成的,因此在创建某个类的第二个对象时,该类的静态块就不会执行了
单个类中的执行顺序:静态初始化块(多个是从上往下执行),初始化块(多个是从上往下执行),构造器
执行结果:
注意:在某个类创建多个对象时,静态初始化块就只会执行一次,不会再加载第二次
执行结果:
多个类的继承中的执行顺序:在继承中,先后执行父类A的静态块,父类B的静态块,最后是子类的静态块,然后再执行父类A的初始化块和构造器,再是父类B的初始化块和构造器,最后执行子类的初始化块和构造器。
第一个类:
第二个类(子类继承父类):
第三个类(多重继承):
执行结果: