当某个类加载器需要加载某个.class文件时,它首先会把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。
1.类加载器收到类加载的请求
2.将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器
3.启动类加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器
否则,抛出异常,通知子类加载器进行加载
4.重复步骤3
package java.lang;
/**
* @Author suaxi
* @Date 2020/11/29 12:37
*/
public class String {
//双亲委派机制
//1.APP --->EXC --->BOOT(最终执行)
//BOOT
//EXC
//APP
public String toString(){
return "Hello";
}
public static void main(String[] args) {
String s = new String();
System.out.println(s.getClass().getClassLoader());
s.toString();
}
/*
1.类加载器收到类加载的请求
2.将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器
3.启动类加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器
否则,抛出异常,通知子类加载器进行加载
4.重复步骤3
ClassNotFound
null:java调用不到
*/
}
此实例会报错无法找到main主方法
package java.lang;
/**
* @Author suaxi
* @Date 2020/11/29 12:55
*/
public class Student {
@Override
public String toString() {
return "Hello";
}
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.toString());
}
}
双亲委派机制的作用:
1.防止重复加载同一个.class
2.保证核心.class
不会被篡改
评论 (0)