Java的类加载过程分为以下五个步骤:
加载(Loading):通过类加载器将字节码文件加载到内存中,并创建一个对应的Class对象。这个过程是由类加载器完成的,它会根据类的全限定名查找并读取字节码文件,并将其转化为一个Class对象。
验证(Verification):对加载的字节码文件进行验证,确保其符合Java语言规范。验证过程包括文件格式验证、元数据验证、字节码验证和符号引用验证等。
准备(Preparation):为类的静态变量分配内存,并设置默认初始值。在这个阶段,静态变量会被赋予默认值,比如数值类型的变量被赋值为0,引用类型的变量被赋值为null。
解析(Resolution):将符号引用转换为直接引用。符号引用是一种在编译阶段使用的,和内存地址无关的引用,而直接引用则是可以直接指向内存地址的指针、句柄或者偏移量。解析过程会将符号引用替换为直接引用,以便程序能够直接访问内存中的对象。
初始化(Initialization):为类的静态变量赋予真正的初始值,并执行静态代码块中的代码。在这个阶段,静态变量会被赋予程序中指定的初值,静态代码块中的代码会被执行。同时,如果类中存在父类,则会先初始化父类。
这五个步骤构成了Java类加载的完整过程。