Java中类加载器是把类(class)装进jvm的,jvm在运行时会产生3个类加载器组成的初始化加载器层次结构
第一个层次:用c++写的,是jvm自带的类装载器,负责java平台核心类库,用户是看不到的
第二层次:扩展类加载器,负责负责jdk_home/lib/ext目录下的jar包或 –D java.ext.dirs指定目录下的jar包装入工作库
第三层次:系统类加载器,负责java –classpath或 –D java.class.path所指的目录下的类与jar包装入工作 (该层次经常被用到,例如我们加载当前web项目bin目录下的文件)
代码:
public void testClassLoad() throws ClassNotFoundException {
//1获取一个系统类加载器
ClassLoader cl = ClassLoader.getSystemClassLoader();
System.out.println(cl);
//2.获取系统类加载器的父类加载器(扩展类加载器)
cl = cl.getParent();
System.out.println(cl);
//3.获取扩展类加载的父类加载器(引导类的加载器)
cl = cl.getParent();
System.out.println(cl);
//4.测试当前类由那个类加载器进行加载
ClassLoader classLoader = Class.forName("cn.pzhu.reflection.Person").getClassLoader();
System.out.println(classLoader);
//5.测试jdk提供的object类由哪一个类加载器负责
classLoader = Class.forName("java.lang.Object").getClassLoader();
System.out.println(classLoader);
//6.关于类加载器的一个主要方法,加载当前目录classpath下的文件
InputStream in = null;
in = this.getClass().getClassLoader().getResourceAsStream("test.properties"); //文件位置默认放在src目录下
System.out.println(in);
}