Bootstrap ClassLoader 最顶层的加载类,加载运行时核心类库,jre\lib下的 jar 包与 class 文件
Extention ClassLoader 加载扩展包jre\lib\ext目录下的 jar 包和 class 文件
Application ClassLoader 加载当前应用的 classpath 的所有类,即默认情况下用户自定义的类
表中都是 JVM 提供的类加载器,加载指定目录的 jar 和 class,如果要加载其他位置(例如网络上)的字节码文件,就需要定义自己的类加载器。
双亲委派模型类加载器的层次关系,即双亲委派模型,如下图:
如果一个类加载器收到加载请求,先将请求委派给父类加载器去完成,若父类加载器反馈无法完成这个加载请求(它的搜索范围内没有找到所需的类)时,子类加载器才会尝试自己去加载。
双亲委派模型能够保证类的唯一性。我们无法定义一个与已有类同名的类,比如java.lang.Object,退一步说,即使可以定义,真正加载的时候也不会加载它,而是由 Bootstrap ClassLoader 去加载核心类库中的java.lang.Object。
两个类 equals 的条件是类名相同且类加载器相同。