jvm的双亲委派机制 一

先上一段代码:

main方法:

package com.sailmalan.malan.controller;

/**
 * 功能描述 原子操作 atomic类 java.util.concurrent.atomic
 *
 * @author yaoqihui
 * @version 2021/7/3
 * @see [相关类/方法]
 * @since [malan-rabbitmq]
 */
public class Test {

    public static void main(String[] args) {
        java.lang.String str=new java.lang.String();
        System.out.println("双亲委派机制代码演示===");
    }
}

 

其中我们在定义一个String类,如下:在项目下建立包:java.lang:

 

然后看看执行main方法,看看输出是否在控制台顺序输出:我是自定义String类,双亲委派机制代码演示===

 

 

结果并不是我们想象的结果!!!为啥?明明我们在main方法已经引入:java.lang包,意思是已经制定引入的自定义String类,为啥???

这就是双亲委派机制!!!下面详细讲解(涉及到引导类的问题):我们先看一个图:

图解析为:系统类加载器(jvm的默认加载器),系统加载器开始加载java.lang.String类,开始委托了上一个  扩展类加载器,扩展类加载器再向上委托 引导类加载器,即这些加载器有多少个父类加载器,就以此递归直到最顶层的加载器,jvm只有三个加载器,所以这里最顶层的加载器是 引导类加载器。

图一:

 

图二:

 

看到最后的图二,恍然大悟!!!原来引导类加载器(Bootstrap ClassLoader)强制加载 java 开头的类

 

posted @ 2021-07-09 23:57  QH.Thomas  阅读(47)  评论(0编辑  收藏  举报