类加载器的双亲委派机制
1)启动类加载器:null(不是由java实现)
System.out.println(类名.class.getClassLoader().getParent().getParent());
启动类加载器加载java核心库(java路径下jre/lib、classes)
2)扩展类加载器:sun.misc.Launcher$ExtClassLoader@5010be6
System.out.println(类名.class.getClassLoader().getParent());
扩展类加载器加载java扩展类库(java路径下jre/ext、/jre/ext/classes)
3)应用类加载器:sun.misc.Launcher$AppClassLoader@18b4aac2
System.out.println(类名.class.getClassLoader());
应用类加载器加载环境变量classpath下面的类
java的加载顺序是:启动类加载器 -> 扩展类加载器 -> 应用类加载器,如果要加载的类名在三者都存在,那会按照此顺序,优先找启动类加载器,如果找到会返回结果,否则返回null,再在扩展类加载器查询结果,如果找到会返回结果,否则返回null,然后再去应用类加载器查询结果,如果找到会返回结果,否则返回异常。