一、整加载过程:
1.1、Loading 装载
- 先找到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
重点:双亲委派准则
- 字节流 ---> 静态数据构造 ---> 办法区(供所有Java虚拟机栈应用)
- 字节流 ---> class对象 ---> 堆 (供所有Java虚拟机栈应用)
1.2、Linking 筹备
- Verification 验证
验证数据的准确性。说白了就是看你文件对不对,例:文件格式、元数据、字节码、符号援用 - Preparation 筹备
为类的动态变量分配内存,并赋值为以后类型默认值; - Resolution 解析
将类的符号援用(存在常量池)变成间接援用;
这在class文件汇总只是示意改数据是什么类型,就如一种标识、一种符号,在这个过程中要将这些符号分配内存
1.3、Initiating 初始化
为类的动态变量真正的初始化值