我们把类加载阶段中的 “通过一个类的权限定名来获取描述此类的二进制字节流”
这个动作放到java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类
,实现这个动作的代码模块称为“类加载器”。
在java虚拟机中,任意一个类,都需要加载它的类加载器和这个类本身 一同确定其在java虚拟机
中的唯一性 否则,即使两个类来源同一个class文件 被同一个虚拟机加载
只要加载他们的类加载器不同,那么这两个类就必定不相等
从java虚拟机的角度,只存在两种不同的类类加载器:一种是启动类加载器,
是虚拟机自身的一部分,另一种就是所有其他类的加载器,有Java语言实现,
独立于虚拟机外部,并且全部都继承自抽象类 java.lang.ClassLoader.
从开发人员的角度,绝大部分程序都会使用到三种类加载器:
启动类加载器 :开发人员不可以使用这个加载器
扩展类加载器 :负责加载lib/ext目录中的类,或者被java.ext.dirs系统变量指定的路径中的类
应用程序类加载器也就是系统加载器:负责加载用户类路径上的类