类加载器
1.概念
类加载器:类加载器是负责加载类的对象。将class文件(硬盘)加载到内存生成Class对象。
2.类加载器的组成
BootstrapClassLoader 根类加载器
也被称为引导类加载器,负责Java核心类的加载
比如System,String等。
ExtClassLoader 扩展类加载器
负责JRE的扩展目录中jar包的加载。
在JDK中JRE的lib目录下ext目录
AppClassLoader 系统类加载器
负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径。
3.类加载器的继承关系
所有的类加载器都是 java.lang.ClassLoader 的子类
使用 类.class.getClassLoader() 获得加载自己的类加载器
ClassLoader类中的成员方法getParent():返回委托的父类加载器
类加载器加载机制:全盘负责委托机制
全盘负责:A类如果要使用B类(不存在),A类加载器必须负责加载B类。
委托机制:A类加载器如果要加载资源B,必须询问父类加载是否加载。 如果加载,将直接使用。 如果没有
机制,自己再加载。
采用全盘负责委托机制保证一个class文件只会被加载一次,形成一个Class对象。
4.代码
package jiazaiqi;
import org.junit.Test;
public class Demo {
@Test
public void method(){
ClassLoader cl = Demo.class.getClassLoader();
System.out.println(cl);//jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dc
ClassLoader pr = cl.getParent();
System.out.println(pr);//jdk.internal.loader.ClassLoaders$PlatformClassLoader@3891771e
ClassLoader p = pr.getParent();
System.out.println(p);//null
}
}