当实例化子类对象时,首先要加载父类的class文件进内存,静态代码块是随着类的创建而执行, 所以父类静态代码块最先被执行,子类class文件再被加载,同理静态代码块被先执行;实例化子类 对象要先调用父类的构造方法,而调用父类构造方法前会先执行父类的非静态代码块
如果类还没有被加载: 1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。 2、执行子类的静态代码块和静态变量初始化。 3、执行父类的实例变量初始化 4 、执行父类的非静态代码块 5、执行父类的构造函数 6、执行子类的非静态代码块 7、执行子类的实例变量初始化 8、执行子类的构造函数
如果类已经被加载: 则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。