Java类加载器(ClassLoader)--类加载的过程

将class文件加载到虚拟机的内存中,这个过程称为类加载。

类加载的过程:

  1. 加载(Loading),类加载过程的一个阶段,通过一个类的完全限定查找此类字节码文件,并利用字节码文件创建一个Class对象。

  2. 验证(Verification),目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身安全。主要包括四种验证:文件格式验证、元数据验证、字节码验证、符号引用验证。

  3. 准备(Preparation),为类变量(static修饰)在方法区中分配内存并设置初始值。private static int var = 100;准备阶段完成后,var 值为0,而不是100。在第5步初始化阶段,才会把100赋值给val,但是有个特殊情况:private static final int VAL= 100;在编译阶段会为VAL生成ConstantValue属性,在准备阶段虚拟机会根据ConstantValue属性将VAL赋值为100。

  4. 解析(Resolution),主要将常量池中的符号引用替换为直接引用的过程。符号引用就是一组符号来描述目标,可以是任何字面量,而直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。

  5. 初始化(Initialization),类加载最后阶段,若该类具有超类,则对其进行初始化,执行静态初始化器和静态初始化成员变量(如前面只初始化了默认值的static变量将会在这个阶段赋值,成员变量也将被初始化)。

你可能感兴趣的:(Java类加载器(ClassLoader)--类加载的过程)