类加载器分类
有三种默认使用的类加载器,分别是Bootstrap ClassLoader、Extension ClassLoader和System ClassLoader(也称为Application ClassLoader),除此之外还可以自定义类加载器,每种类加载器已经确定从哪个位置加载类文件。
Bootstrap ClassLoader引导类加载器
Bootstrap ClassLoader是由C/C++来编写的,负责加载JDK自带的lib目录下如rt.jar包中(名字不符合的类库即使放在lib目录下也不会被加载)的类文件以及sun.boot.class.path路径下的内容,是所有的类加载器的父加载器,并没有继承ClassLoader类
Extension ClassLoader扩展类加载器
Extension ClassLoader是由java语言编写的,sun.misc.Launcher.ExtClassLoader实现,继承了ClassLoader类,负责加载Java扩展类库,从lib/ext目录下或者java.ext.dirs系统属性指定的目录下加载类,父类加载器是Bootstrap ClassLoader
Application ClassLoader系统类加载器
Application ClassLoader是由java语言编写的,sun.misc.Launcher.AppClassLoader实现,继承了ClassLoader类,负责从classpath环境变量中加载类文件,classpath环境变量通常由”-classpath”或”-cp”命令行选项来定义,或是由JAR中Mainifest文件的classpath属性指定,父加载器是Extension ClassLoader,该加载器是程序默认的加载器,一般情况下,java中的类都是由该加载器加载的