如何完美解答面试问题——双亲委派机制及作用

 大家好,我是孤焰。今天要谈一谈在面试过程中几乎被每个面试官都会提到的一个问题——java中双亲委派机制及作用
 由于我也是刚刚学习编程的小白,所以此篇博文将参考了多篇博文,最后总结而成。

1.什么是双亲委派机制

 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。

2.类加载器

2.1 什么是类加载器

 类加载器是jre的一部分,负责动态将类添加到Java虚拟机。

2.2 类加载器的分类

 类加载器分类:

  1. 启动类加载器bootstrap classloader :加载jre/lib/rt.jar,只加载包名为java、javax、sun等开头的类,使用c++语言编写。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作
  2. 扩展类加载器extension classloader:加载jre/lib/ext/*.jar,使用java语言编写
  3. 应用程序类加载器(又名系统类加载器) application classloadersystem classloader):加载classpath上指定的类库,使用java语言编写
  4. 用户自定义类加载器 custom classloader:加载指定路径的class文件,使用java语言编写

在这里插入图片描述

注意:这四个加载器之间是包含关系。不是上下层关系,也不是继承关系

3.双亲委派机制

在这里插入图片描述

3.1 工作原理

 1)如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;

 2)如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器;

 3)如果父类加载器可以完成加载任务,就成功返回,倘若父类加载器无法完成此挤在任务,子加载器才会尝试自己去加载,这就是双亲委派模式。

3.2 委派机制流程图

在这里插入图片描述

4.双亲委派机制的作用

4.1 双亲委派机制的作用

  1. 防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
  2. 保证核心.class不能被篡改。通过委托方式,不会去篡改核心.class,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。

4.2 举例

 有的小伙伴可能不明白第2点作用,下面将举例说明(引用尚硅谷课堂中的案例):

 大家都知道我们在创建包的时候不能创建名字为java的包,但为了举例我故意创建java.lang包并在此包下创建一个名字为String的类,如下图:
在这里插入图片描述


 在此时当执行main方法的时候,会出现如下问题:
在这里插入图片描述
 可想而知,idea根据包名一层一层的向上请求,在请求 bootstrap classloader加载器的时候, bootstrap classloader发现自己可以加载java.lang包下的类,所以对类库中的String进行了加载,但是类库中的String类并没有main方法,所以抛出了上述异常。

4.3 总结

 由上述例子得知,双亲委派机制很好的防止了代码编写者对类中已有的类进行篡改,系统类库中的核心类由bootstrap classloader加载器进行加载。

5.最后

都看到最后了,求求大家点个赞再走吧!你的支持是博主创作的最大动力。

在这里插入图片描述

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值