Skip to content

Java类初始化顺序

类初始化阶段是类加载过程的最后一步。初始化阶段,开始执行Java代码(或者说字节码)。

初始化阶段是执行<clinit>()方法的过程。这个方法由编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合并产生的。编译器收集的顺序是由语句在源文件中出现的顺序决定的。 如果多个线程去同时去初始化一个类,那么只有一个线程去执行这个类的<clinit>()方法,其他线程都会阻塞等待,直到活动线程<clinit>()方法执行完毕。 同一个类加载器下,一个类型只会初始化一次。

顺序是:

  • 基类
  • 静态代码块
  • 静态成员字段(按先后顺序)
  • 子类(派生类)
  • 静态代码块
  • 静态成员变量