类加载器加载顺序:
1.启动类加载器:Bootstrap ClassLoder
2.扩展类加载器:Extendsion ClassLoder
3.应用类加载器:Application ClassLoder
双亲委派模型:所有类加载器在加载类的时候都会让父类加载器先加载该类,当父类加载器无法加载该类时,该类才会自行加载类。这样避免了某些类在加载时出现不同类型,如java.lang.Object是所有类的父类,应用类加载器在加载用户自定义类时,会先加载该类所有的父类,若该类被应用类加载器加载后,其他类加载器在重复加载,则会出现不同类型的Object类。
Bootstrap ClassLoad是采用c++写的加载器,因此java代码无法获取该加载器,这个类负责加载JAVA_HOME/bin目录或者被-XBootClassPath所指定的并且是虚拟机识别的(仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载)类库加载到虚拟机内存中。
Extendsion ClassLoader 主要加载jdk启动时的jar包<JAVA_HOME>\lib\ext目录中,或者被java.ext.dirs系统变量所指定的路径中的类库,开发者可以直接使用扩展类加载器。获取:类名.Class.getClassLoader().getParent().属于应用类加载器的父类
Application ClassLoader 加载自己写的代码类。className.Class.getClassLoader获取应用类加载器