JVM中存在三个默认的类加载器
1.BootStrapClassLoader负责加载标准库中的类(String, ArrayList, Random, Scanner..)
2.ExtensionClassLoader负责加载JDK扩展的类.(现在很少会用到)
3.ApplicationClassLoader 负责加载当前项目目录中的类~~
ApplicationClassLoader 的父加载器是ExtensionClassLoader,ExtensionClassLoader的父加载器BootstrapClassLoader。
JVM在加载一个类时,会调用ApplicationClassLoader 的loadClass方法来加载这个类。不过在这个方法中,会先使用ExtensionClassLoader的loadClass方法来加载类。
同样ExtensionClassLoader的loadclass会使用BootstrapClassLoader来加载类。如果BootstrapClassLoader加载到了就直接成功。
如果BootstrapClassLoader没有加载到,那么ExtensionClassLoader就会自己尝试加载该类。如果没有加载到,那么则会由ApplicationClassLoader 来加载这个类。
所以,双亲委派指的是jvm在加载类时,会委派给ExtensionClassLoader和BootstrapClassLoader进行加载,如果没加载到才有自己进行加载。