java类的初始化顺序

先说结论:

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

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

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

第四等级:父类构造函数

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

第六等级:子类构造函数


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

第一个为 变量的打印类:

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

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


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


最后一个实现主类:


打印结果:


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


打印结果:


根据结果分析:

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

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

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

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

第四等级:父类构造函数

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

第六等级:子类构造函数


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   最近在看回顾Java基础的时候,发现看似很简单的类初始化的顺序却并不是那么简单(往往越是简单的东西反而越容易出...
    BrightLoong阅读 5,339评论 0 2
  • Java类的初始化顺序 (静态变量、静态代码块)> 类里的 main()(如果有的话) > (变量、初始化块) >...
    PaulLuv阅读 1,472评论 1 0
  • 这票文章主要想来说一下Java类各部分(非静态字段初始化、非静态块、静态字段初始化、静态块、构造函数)的执行顺序。...
    第四单元阅读 3,077评论 0 2
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 7,990评论 2 9
  • 今天介绍下java类的初始化顺序。 这里写了个类方便更直观的表达(代码太长没人看) 运行结果 从结果我们可以看出 ...
    rainumdo阅读 2,910评论 0 1

友情链接更多精彩内容