类加载

191 阅读1分钟

什么是双亲委托?

类加载器的种类:

  • BootstrapClassLoader(启动类加载器):

    加载java核心类(%JAVA_HOME%\bin目录下的所有jar包,或-Xbootclasspath指定的目录),构造ExtClassLoaderAppClassLoader

  • ExtClassLoader(扩展类加载器):

    加载%JAVA_HOME%\bin\ext目录下的所有jar包,或者是java.ext.dirs参数指定的路径;

  • AppClassLoader(应用程序类加载器):

    负责加载用户类路径上所指定的类库,如果应用程序中没有自定义加载器,那么该加载器就为默认加载器。

  • CustomClassLoader(用户自定义加载器):

    用户自定义的类加载器,可加载指定路径的class文件

加载器的层级关系

委托机制流程图

1-类加载器收到类加载的请求;

2-把这个请求委托给父加载器去完成,一直向上委托,直到启动类加载器;

3-启动器加载器检查能不能加载(使用findClass()方法),能就加载(结束);否则,抛出异常,通知子加载器进行加载。

双亲委托的优点

不管哪个加载器加载这个类,最终都是委托给顶层的启动加载器加载这个类,这样就保证了使用不用的类加载器最终得到的都是同样的Object对象