Java类的初始化过程包括以下几个步骤:
-
加载类:当程序中使用到某个类时,Java虚拟机会先通过类加载器将该类的字节码文件加载到内存中。
-
链接:链接是将被加载的类合并到Java虚拟机的运行时环境中的过程,包括验证、准备和解析三个阶段。
-
验证:验证字节码文件是否符合Java虚拟机规范,包括安全性验证和字节码验证等。
-
准备:为类的静态变量分配内存并设置默认初始值,比如基本类型的变量会被设置为0,引用类型的变量会被设置为null。
-
解析:将常量池中的符号引用转换为直接引用,这是为了后续的动态链接和运行时的调用准备工作。
-
-
初始化:在类的准备阶段结束后,将执行类的初始化操作,包括为静态变量赋值和执行静态代码块。
-
赋值:将静态变量按照代码中的赋值语句进行赋值。
-
执行静态代码块:执行类中的静态代码块,静态代码块中的代码会按照在类中的顺序执行。
-
需要注意的是,只有在使用类时才会触发类的初始化操作,而且一个类只会被初始化一次。另外,子类的初始化会触发父类的初始化操作,即父类的静态代码块会在子类的静态代码块之前执行。