类加载器
1、作用:负责把磁盘上的class文件加载到JVM中,Class引用字节码
2、JVM中的类加载器:
BootStrap:老大。类加载器的祖先。 打印它会得到null。
负责加载JRE/lib/rt.jar(JDK中绝大部分的类)
ExtClassLoader:
负责加载JRE/lib/ext/*.jar
AppClassLoader:
负责加载在classpath环境变量中的所有类。
3、父类委托机制
上图解释:
如果我们要查找一个类,并不会直接先在AppClassLoader的作用域中寻找,而是交给它的父类ExtClassLoader,ExtClassLoader也不会立即在自己的作用域里面找,而是继续交给它的父类BootStrap,因为BootStrap是最顶层的,所以会在自己的作用域寻找,找到了就加载,找不到就告诉ExtClassLoader没找到,然后ExtClassLoader在自己的作用域寻找,找到了就加载,找不到就告诉AppClassLoader没找到,AppClassLoader在自己的作用域找,找到就加载,找不到就抛出ClassNotFoundException。
总的来说就是:先从最顶层的加载器寻找,找不到就往下一级寻找,以此类推,如果最后一级也没找到,就抛出ClassNotFoundException。