java类的初始化顺序

先说结论:

第一等级:父类静态方法、父类静态变量

第二等级:子类静态方法、子类静态变量

第三等级:父类普通代码块、父类普通变量

第四等级:父类构造函数

第五等级:子类普通代码块、子类普通变量

第六等级:子类构造函数


为了结构清晰,共建立四个相关的测试类

第一个为 变量的打印类:

java类的初始化顺序_第1张图片

第二个为父类,父类中依次包含 :

1.静态方法     2.静态成员变量   3.普通方法   4.普通成员变量  5.构造函数


java类的初始化顺序_第2张图片

  第三个为子类,继承父类:


java类的初始化顺序_第3张图片

最后一个实现主类:


java类的初始化顺序_第4张图片

打印结果:


java类的初始化顺序_第5张图片

更换父类子类各元素位置,如下图:


java类的初始化顺序_第6张图片
java类的初始化顺序_第7张图片

打印结果:

java类的初始化顺序_第8张图片


根据结果分析:

        将java类的初始化顺序分为六个等级,第一等级最先初始化,直至第六等级类初始化完成,同一等级内的元素的初始化顺序更具元素在类中的相对位置而定(如:第一等级的静态方法在类中出现的顺序大于父类静态变量,则父类静态方法的初始化顺序优于父类静态方法,反之,则父类静态变量由于父类静态方法):

第一等级:父类静态方法、父类静态变量

第二等级:子类静态方法、子类静态变量

第三等级:父类普通代码块、父类普通变量

第四等级:父类构造函数

第五等级:子类普通代码块、子类普通变量

第六等级:子类构造函数


另附:静态成员方法与静态变量无论父子类,均只在第一次加载时执行(因静态方法与变量存放于jvm的静态区中)

你可能感兴趣的:(java类的初始化顺序)