分类
1、引导类加载器,用C++编写的,是JVM自带的类加载器
负责Java平台核心库,用来加载核心类库。构造ExtClassLoader和AppClassLoader,该加载器无法直接获取
Java平台核心库:jrelibrt.jar,用压缩软件打开,里面的类就是我们平时要学的。这个jre是公共jre,并非jdk目录下的专用jre
2、拓展类加载器,负责jrelibext目录下的jar包
或-D java.ext.dirs指定目录下的jar包装入工作库
此处jre也是公共jre
3、系统类加载器
负责java -classpath或-D java.class.path所指的目录下的类与jar包装入工作,是最常用的加载器
实例
package com.volcano.reflection; public class TestReflection4 { public static void main(String[] args) { //获取系统类加载器 ClassLoader classLoader = ClassLoader.getSystemClassLoader(); System.out.println(classLoader); //获取拓展类加载器 classLoader = classLoader.getParent(); System.out.println(classLoader); //获取引导类加载器(是直接无法获取的) classLoader = classLoader.getParent(); System.out.println(classLoader); //测试当前类是由哪个类加载器加载的——引导类加载器 System.out.println(TestReflection4.class.getClassLoader()); //测试JDK内置的类是由哪个类加载器加载的——系统类加载器null System.out.println(Object.class.getClassLoader()); //如何获得系统类加载器的加载的类的路径 System.out.println(System.getProperty("java.class.path")); /*之前用过的commons-io和自己写的类也在其中 * E:JDKjrelibcharsets.jar; * E:JDKjrelibdeploy.jar; * E:JDKjrelibextaccess-bridge-64.jar; * E:JDKjrelibextcldrdata.jar; * E:JDKjrelibextdnsns.jar; * E:JDKjrelibextjaccess.jar; * E:JDKjrelibextjfxrt.jar; * E:JDKjrelibextlocaledata.jar; * E:JDKjrelibextnashorn * .jar;E:JDKjrelibextsunec.jar; * E:JDKjrelibextsunjce_provider.jar; * E:JDKjrelibextsunmscapi.jar; * E:JDKjrelibextsunpkcs11 * .jar;E:JDKjrelibextzipfs.jar; * E:JDKjrelibjavaws.jar; * E:JDKjrelibjce.jar; * E:JDKjrelibjfr.jar; * E:JDKjrelibjfxswt.jar; * E:JDKjrelibjsse.jar; * E:JDKjrelibmanagement-agent.jar; * E:JDKjrelibplugin.jar; * E:JDKjrelibresources.jar; * E:JDKjrelibrt.jar; * F:云CodeJavaSEoutproduction基础语法; * F:云CodeJavaSE基础语法srccomlibcommons-io-2.6.jar; * D:IntelliJ IDEA 2018.2.4libidea_rt.jar * */ } }