文章目录
- 一、类加载器概述
- 二、加载器的过程
- 三、类加载器的分类
- 四、双亲委派模型
- 六、ClassLoader中的两个方法
一、类加载器概述
负责将.class文件加载到内存中

类加载的时机
- 创建类的实例
- 调用类的类方法
- 访问类或者接口的类变量,或者为该类变量赋值
- 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
- 初始化某个类的子类
- 直接使用java.exe命令来运行某个主类
二、加载器的过程
- 加载
- 链接

- 验证
- 准备
- 解析



- 初始化

当一个类被使用的时候,才会加载到内存。
三、类加载器的分类
- Bootstrap class loader:启动类加载器,是虚拟机的内置类加载器,通常表示为null ,并且没有父null。
- Platform class loader:平台类加载器,负责加载JDK中一些特殊的模块,其父加载器为Bootstrap class loader。
- System class loader:系统类加载器,负责加载用户类路径上所指定的类库,其父加载器为Platform class loader。
四、双亲委派模型
如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。

六、ClassLoader中的两个方法
方法名 | 说明 |
public static ClassLoader getSystemClassLoader() | 获取系统类加载器 |
public InputStream getResourceAsStream(String name) | 加载某一个资源文件 |
需求:
- 利用加载器去加载一个指定的文件
prop.properties文件信息
value=csdn测试类ClassLoaderDemo
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ClassLoaderDemo {
public static void main(String[] args) throws IOException {
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
InputStream is = systemClassLoader.getResourceAsStream("prop.properties");
Properties prop = new Properties();
prop.load(is);
System.out.println(prop);
is.close();
}
}
















