Java虚拟机设计团队有意将类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放在虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码称为“类加载器”
类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用远大于类加载阶段。对于任意的一个类,都必须由这个类的类加载器和这个类本身一共同确定在Java虚拟机中的唯一性,每一个类加载器都拥有一个独立的类名称空间。这句话可以这样理解:比较两个类是否“相等”,只有在这两个类由同一个类加载器加载的前提下才有意义,否则即是这两个类来源于同一个Class文件,被同一个Java虚拟机所加载,只要它们的类加载器不同,则两个类也不相同
这里的相等,包括代表类的Class对象的equals方法,isAssignableFrom()方法,isInstance()方法的返回结果,也包括使用了instanceof关键字做对象所属关系判定等各种情况