java] view plain copy
- import java.net.URL;
- import java.net.URLClassLoader;
- /*
- 分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径
- *
- */
- public class ClassPath_of_Bootstrap_Ext_AppClassLoader
- {
- public static void main(String[] args)
- {
- System.out.println("BootstrapClassLoader 的加载路径: ");
- URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();
- for(URL url : urls)
- System.out.println(url);
- System.out.println("----------------------------");
- //取得扩展类加载器
- URLClassLoader extClassLoader = (URLClassLoader)ClassLoader.getSystemClassLoader().getParent();
- System.out.println(extClassLoader);
- System.out.println("扩展类加载器 的加载路径: ");
- urls = extClassLoader.getURLs();
- for(URL url : urls)
- System.out.println(url);
- System.out.println("----------------------------");
- //取得应用(系统)类加载器
- URLClassLoader appClassLoader = (URLClassLoader)ClassLoader.getSystemClassLoader();
- System.out.println(appClassLoader);
- System.out.println("应用(系统)类加载器 的加载路径: ");
- urls = appClassLoader.getURLs();
- for(URL url : urls)
- System.out.println(url);
- System.out.println("----------------------------");
- }
- }
file:/C:/jdk1.7.0_01/jre/lib/resources.jar
file:/C:/jdk1.7.0_01/jre/lib/rt.jar
file:/C:/jdk1.7.0_01/jre/lib/sunrsasign.jar
file:/C:/jdk1.7.0_01/jre/lib/jsse.jar
file:/C:/jdk1.7.0_01/jre/lib/jce.jar
file:/C:/jdk1.7.0_01/jre/lib/charsets.jar
file:/C:/jdk1.7.0_01/jre/classes
sun.misc.Launcher$ExtClassLoader@3e389405
file:/C:/jdk1.7.0_01/jre/lib/ext/dnsns.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/localedata.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/sunec.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/sunjce_provider.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/sunmscapi.jar
file:/C:/jdk1.7.0_01/jre/lib/ext/zipfs.jar
sun.misc.Launcher$AppClassLoader@a200d0c
file:/E:/JAVA/JVM_Class_Reflect_Thread/ClassPath_of_Bootstrap_Ext_AppClassLoader/bin/
JDK源代码中,protected Class<?> loadClass(String name, boolean resolve) 方法
1:先调用parent.loadClass(name, false)
2:如果父亲加载失败,则调用 loadClass(name, false) 方法 查找"当前类加载器"对应的"目录"来加载
public Class<?>loadClass(String name, boolean resolve)
1.调用 findLoadedClass(name) 来检查是否已经加载类。
2.在父类加载器上调用 loadClass方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。
/-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------