一、整加载过程:


1.1、Loading 装载

  1. 先找到classw文件 ---> 字节流 ---> 类加载器ClassLoader

测试:

public static void main(String[] args) {    System.out.println(new Student().getClass().getClassLoader());    System.out.println(new Student().getClass().getClassLoader().getParent());    System.out.println(new Student().getClass().getClassLoader().getParent().getParent());    System.out.println(new String().getClass().getClassLoader());}sun.misc.Launcher$AppClassLoader@18b4aac2sun.misc.Launcher$ExtClassLoader@10f87f48nullnull

重点:双亲委派准则

  1. 字节流 ---> 静态数据构造 ---> 办法区(供所有Java虚拟机栈应用)
  2. 字节流 ---> class对象 ---> 堆 (供所有Java虚拟机栈应用)

1.2、Linking 筹备

  1. Verification 验证
    验证数据的准确性。说白了就是看你文件对不对,例:文件格式、元数据、字节码、符号援用
  2. Preparation 筹备
    为类的动态变量分配内存,并赋值为以后类型默认值;
  3. Resolution 解析
    将类的符号援用(存在常量池)变成间接援用;

    这在class文件汇总只是示意改数据是什么类型,就如一种标识、一种符号,在这个过程中要将这些符号分配内存

1.3、Initiating 初始化

为类的动态变量真正的初始化值