Java 类加载的过程
加载过程
加载
将class文件加载入内存
连接
- 验证。防止传入错误数据弄脏JVM。
- 准备。给静态变量分配内存空间。
- 解析。将符号引用转为直接引用。
符号引用:
A引用B,此时是A引用了B的CONSTANT_Class_info(类似字符串)。
直接引用:
A引用B,那么A直接指向B的内存地址。
初始化执行过程
- 静态变量赋值
- 执行静态代码块
- 普通变量赋值
- 执行构造器内容
父类子类
加载子类的时候,如果父类没有加载,先加载父类。
内部类/外部类
静态内部类和外部类不存在依存关系。单独加载内部类,不会引起外部类的加载。
双亲委派原则
使用不同的类加载器都可以对类进行加载。为了防止对同一个类进行多次加载,加载时首先会将加载任务交给父加载器加载,如果父加载器不加载,再交回给子类加载器加载。