1、先提一个小问题,父类中有静态块、非静态块、构造函数,子类中有静态块、非静态块、构造函数,new子类对象的时候,上述六项执行顺序是什么?
先上代码
class Animal {
static {
System.out.println("parent class static code");
}
{
System.out.println("parent class non-static code");
}
public Animal() {
System.out.println("parent class constructor");
}
}
class Dog extends Animal {
static {
System.out.println("son class static code");
}
{
System.out.println("son class non-static code");
}
public Dog() {
System.out.println("son class constructor");
}
}
public class InitOrder {
public static void main(String[] args) {
new Dog();
}
}
执行结果如下所示
parent class static code
son class static code
parent class non-static code
parent class constructor
son class non-static code
son class constructor
2、在同一个类中,全局变量的初始化总是优先于构造函数。