类加载器与双亲委派模型

加载器 类加载器 解释
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 的条件是类名相同且类加载器相同。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjppw.html