双亲委派机制
双亲委派机制介绍:
程序加载某个类,查找过程(从父级开始找):
- 现在bootstrap ClassLoaer下,找不到就会去 Extension ClassLoaer 下找
- 如果在Extension ClassLoaer 找不到就会去App ClassLoaer找
- 如果在App ClassLoaer找不到,一般就会抛出class not found 异常
解释:
当一个类收到了类的加载请求,他首先不会自己去加载这个类,而是把这个请求委派给父亲去完成,每一层的类加载器都是如此,只有当父类加载器反馈自己无法完成这个请求的时候(在他的加载的路径下没有找到所需要加载的class),子类加载器才会尝试自己去加载。
双亲委派模型的优势
比如加载位于rt.jar包中的类java.lang.Object,不管是哪个加载器加载这个类,最终都会委托给顶层的启动类(BootStrap Class Loader)进行加载这样就保证了不同的加载的类加载器最终得到的都是同样的一个Object 对象
沙箱安全(双亲委派机制的安全性和健壮性
沙箱安全:程序员写的代码不会污染Java出厂自带的源代码,这样就可以保证大家用的都是同一个代码(先到先得的原则)
例如:程序员自己建立了一个lang文件夹
package java.lang;
public class String{
//会报出在类java.lang.String中找不到main方法
public static void main(String[] args){
System.out.println("1231232");
}
}
解释:
因为有双亲委派机制,也就是会在Java的BootStrap Class Loader 加载的jar包中寻找,在该jar包下就会找到一个java.lang.String 的类,此时就会停止在子级中寻找(先到先得原则),但是在该类中并未找到main方法,所以运行时会报错。
这样就保证了Java的出厂源码不会受到开发人员编写的污染(沙箱安全机制)