JVM类加载机制
JVM类加载机制
类加载机制
类的加载时机(触发条件)
- 使用new关键字实例化对象
- 读取或设置一个类型的静态字段
- 调用一个类型的静态方法的时候
- 反射(使用java.lang.reflect包的方法对类型进行反射调用)
- 初始化一个类的子类(会首先初始子类的父类)
- JVM启动标明的启动类,即文件名和类名相同的那个类
类的加载过程
- 加载 (Loading)
- 验证(Verification)
- 准备(Preparation)
- 解析(Resoultion)
- 初始化(Initialization)
- 使用(Using)
- 卸载(UnLoading)
注意:静态变量在准备阶段只进行创建;静态常量在准备阶段就会进行初始化
类的加载器(ClassLoader)
- 启动类加载器( Bootstrap ):加载存放在lib目录下的jar包、或被-Xbootclasspath参数指定指向的路径中存放的jar包
- 扩展类加载器( Extension ):加载lib\ext下的jar包
- 应用程序类加载器( Application ):加载用户类路径(ClassPath)上所有类库
- 自定义类加载器( Custom ):继承classLoader,重写findClass方法
双亲委派模型
简单的来说,类加载器永远要先请示上级,上级会请示它的上级,除非所有上级都做不了,这件事才轮到你来
加载过程
不可重写String类