双亲委派模型
Posted Java10分钟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双亲委派模型相关的知识,希望对你有一定的参考价值。
启动类加载器(BootStrap ClassLoader):主要加载lib目录下的特定jar包。
注:启动类加载器无法被java程序直接引用(C++实现)。
扩展类加载器(Extension ClassLoader):主要加载lib/ext木下的jar包,可被直接使用(java实现)。
应用类加载器(Application ClassLoader):主要加载classpath下的jar包,无自定义类加载器则默认应用类加载器为程序的类加载器,可被直接使用。
双亲委派模型(Parents Delegation Model):
①父类加载器优先加载,类加载接受加载请求,直接寻找父类加载器加载。
如应用类加载器接受请求会寻找扩展类加载器,扩展类加载器不会直接加载,会寻找启动类加载器加载。
②父类无法加载(目录中找不到),请求交给子类,由子类尝试加载。
如启动类加载器无法加载,会请求应用类加载器加载。
③请求发起者无法加载(目录中找不到),抛出ClassNotFoundException(找不到类)。
如没有自定义类加载器的情况下,应用类加载器是请求发起者,在启动类加载器和扩展类加载器无法加载的情况下,应用类加载器也无法加载,则没有能相应加载请求的类加载器,只能抛异常。
为什么使用双亲委派模型:
双亲委派模型使java基础类被优先加载。这意味着假如自定义了一个String类,java本身的String(lib目录下rt.jar包含了lang.String)会被优先加载,当你使用String的时候用的是lang包的String,而不是你自定义的String,增强了语言的安全性和使用的规范性。
注:启动类加载器、扩展类加载器、应用类加载器三者尽管理解为父子关系,但实际并不是继承关系,而是组合关系。
以上是关于双亲委派模型的主要内容,如果未能解决你的问题,请参考以下文章
Java双亲委派模型:为什么要双亲委派?如何打破它?破在哪里?