Java 中的 init 和 clinit 方法

1.Java 在编译之后会在字节码文件中生成 <init> 方法,称之为实例构造器,该实例构造器会将语句块、变量初始化,调用父类的构造器等方法收敛到 <init> 方法中,收敛顺序为:

  1. 父类变量初始化

  2. 父类语句块

  3. 父类构造函数

  4. 子类变量初始化

  5. 子类语句块

  6. 子类构造函数

    所谓收敛到 <init>方法中的意思就是将这些操作放入到 <init>中去执行

2.Java 编译之后会在字节码文件中生成 <clinit> 方法,称之为类构造器,类构造器同实例构造器一样,会将静态语句块、静态变量初始化,收敛到 <clinit> 方法中,收敛顺序为

  1. 父类静态变量初始化

  2. 父类静态语句块

  3. 子类静态变量初始化

  4. 子类静态语句块

若父类为接口,则不会调用父类的 <clinit> 方法。一个类可以没有 <clinit> 方法

<clinit> 方法是在类加载的过程中执行,而 <init> 是在类实例化的过程中执行的,所以 <clinit> 一定比 <init> 先执行

-----------本文结束感谢您的阅读-----------
0%