什么是双亲委托?
类加载器的种类:
-
BootstrapClassLoader(启动类加载器):
加载
java核心类(%JAVA_HOME%\bin目录下的所有jar包,或-Xbootclasspath指定的目录),构造ExtClassLoader和AppClassLoader -
ExtClassLoader(扩展类加载器):
加载
%JAVA_HOME%\bin\ext目录下的所有jar包,或者是java.ext.dirs参数指定的路径; -
AppClassLoader(应用程序类加载器):
负责加载用户类路径上所指定的类库,如果应用程序中没有自定义加载器,那么该加载器就为默认加载器。
-
CustomClassLoader(用户自定义加载器):
用户自定义的类加载器,可加载指定路径的
class文件
加载器的层级关系
委托机制流程图
1-类加载器收到类加载的请求;
2-把这个请求委托给父加载器去完成,一直向上委托,直到启动类加载器;
3-启动器加载器检查能不能加载(使用findClass()方法),能就加载(结束);否则,抛出异常,通知子加载器进行加载。
双亲委托的优点
不管哪个加载器加载这个类,最终都是委托给顶层的启动加载器加载这个类,这样就保证了使用不用的类加载器最终得到的都是同样的Object对象