启动级类加载器(Bootstrp ClassLoader)用C++语言写的,它是在Java虚拟机
启动后初始化,
它主要负责加载%JAVA_HOME%/jre/lib,
-Xbootclasspath参数指定的路径
以及%JAVA_HOME%/jre/classes中的类

扩展级类加载器(Extension ClassLoader)用java语言写的,它负责将
%JAVA_HOME%/jre/lib/ext或者由系统变量 java.ext.dir指定位置中的类
库加载到内存中。开发者可以直接使用标准扩展类加载器。

本地类加载器(Applicaiton ClassLoader)用java语言写的,用于加载我
们自己定义编写的类,它负责将系统类路径(CLASSPATH)中指定的类库加载到
内存中。开发者可以直接使用系统类加载器。由于这个类加载器是ClassLoader
中的getSystemClassLoader()方法的返回值,因此一般称为系统
(System)加载器

 双亲委托机制加载类的过程
 当本地类加载器加载一个class时,它首先不会自己去尝试加载这个类,
 而是把类加载请求委派给父类加载器扩展级类加载器去完成。
 
 当扩展级类加载器加载一个class时,它首先也不会自己去
 尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。
 
 如果启动级类加载器加载失败,会使用扩展级类加载器来尝试加载;
 若扩展级类加载器也加载失败,则会使用本地类加载器来加载,
 
 如果本地类加载器也加载失败,则会报出异常ClassNotFoundException。

posted on 2018-10-18 18:42  天堂里的另一天  阅读(87)  评论(0)    收藏  举报