类加载的父委托机制
- 根类加载器(BootStrap): 该加载器没有父加载器。他负责加载虚拟机的核心类库,如java.lang.*等。根类加载器从系统属性sun.boot.class.path 所指定的目录中加载类库。根类加载器的实现依赖于底层操作系统,属于虚拟机实现的一部分,它并没有继承java.lang.ClassLoader类。
- 扩展类加载器(Extension):它的父类加载器为根类加载器。它从java.ext.dirs系统属性所指定的目录中加载类库,或者从JDK的安装目录的jre\lib\ext子目录(扩展目录)下加载类库。扩展类库加载器是纯 java 类,也是java.lang.ClassLoader 类的子类。
- 系统类加载器(System): 也称为应用类加载器,它的父类加载器为扩展类加载器,它从环境变量classpath 或者系统属性java.class.path 所指定的目录中加载类,它是用户自定义的类加载器的默认父类加载器。
父子加载器并非继承关系,也就是说子加载器不一定是继承了父加载器。
父委托机制
开始 : 自定义加载器 准备加载类
首先从自己的命名空间中查找 该类是否已经被 加载过, 如果已经加载就直接返回代表 该类的 Class对象
如果没有加载,自定义加载器首先请求父类加载器(先看作系统类加载器)代为加载,系统类加载器再请求扩展类加载&#x