双亲委派机制

suaxi
2020-11-29 / 0 评论 / 43 阅读 / 正在检测是否收录...

当某个类加载器需要加载某个.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主方法
双亲委派机制.png

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

评论 (0)

取消