java 父子类加载顺序

Posted 儒雅随和狗粉丝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 父子类加载顺序相关的知识,希望对你有一定的参考价值。

先上结论:

父类静态属性(成员变量) > 父类静态代码块 > 子类静态属性 > 子类静态代码块 > 父类非静态属性 > 父类非静态代码块 > 父类构造器 > 子类非静态属性 > 子类非静态代码块 > 子类构造器

这么长怎么记呀?!

这里帮大家小结几个特点:

  1. 静态属性和代码块,当且仅当该类在程序中第一次被 new 或者第一次被类加载器调用时才会触发(不考虑永久代的回收)。也正是因为上述原因,类优先于对象 加载/new,即 静态优先于非静态
  2. 属性(成员变量)优先于构造方法,可以这么理解,加载这整个类,需要先知道类具有哪些属性,并且这些属性初始化完毕之后,这个类的对象才算是完整的。另外,非静态代码块其实就是对象 new 的准备工作之一,算是一个不接受任何外来参数的构造方法。因此,属性 > 非静态代码块 > 构造方法
  3. 有趣的是,静态部分(前4个)是父类 > 子类,而 非静态部分(后6个)也是父类 > 子类
  4. 另外容易忽略的是,非静态代码块在每次 new 对象时都会运行,可以理解:非静态代码块是正式构造方法前的准备工作(非静态代码块 > 构造方法)。

以上是关于java 父子类加载顺序的主要内容,如果未能解决你的问题,请参考以下文章

Java类加载

子类继承父类,子类执行的时候,父子类的执行顺序?

一文详解:Java中父子类静态块构造块构造方法成员变量之间的初始化先后顺序与执行先后顺序

java 类属性的加载顺序(带有继承关系的)

java 中类的加载顺序

vue父子组件加载顺序