java 有继承关系的类的静态变量和非静态变量以及代码块的初始化顺序

类B继承A

在main函数中new一个B类对象

1.父类 静态变量初始化和静态代码先执行

2.再执行子类静态变量初始化和静态代码块

3.再进入B类构造器,以下图顺序进行执行

java 有继承关系的类的静态变量和非静态变量以及代码块的初始化顺序_第1张图片

B中super进入A类构造器,同样是以这个顺序进行执行,A的父类是Object,没有执行语句,就进行A类的普通变量初始化和普通代码块的执行,再执行A类构造器里的其他语句

 java 有继承关系的类的静态变量和非静态变量以及代码块的初始化顺序_第2张图片

 A类构造器执行完毕,返回B类构造器,再进行B类普通变量初始化和普通代码块的执行,再执行B类构造器剩下的语句,此时main中 new B() 这个语句执行完毕,初始化完成;

如有多级继承关系,以此类推

你可能感兴趣的:(java,jvm)