类加载器系列二:什么是双亲委派机制以及原理

本文介绍了Java中的双亲委派机制,解释了为何从应用程序类加载器开始加载以及该机制如何防止核心API被篡改和确保类的唯一性。通过一个自定义String类的例子,阐述了双亲委派在防止类重复加载和保障系统安全方面的作用。
摘要由CSDN通过智能技术生成

大家好,我是骄阳,今天我们来聊一下双亲委派机制。

一、什么是双亲委派

当一个类加载器A去加载某个类时,首先判断有没有加载过,如果没有加载过,自己先不加载,一层层向上委托,如果最顶层父加载器在它的类加载路径下找不到目标类,再一层层向下走,最后由A自己去寻找并载入目标类。

二、双亲委派的过程

为什么要从app加载器开始,为什么不直接从引导类加载器开始加载?

因为90%以上都是自己写的类

三、为什么设计双亲委派?

是否可以自定义string类?

public class String { public static void main(String[] args) { System.out.println("-------------------"); } }

为什么不能自定义string类?

一开始让app去加载,app肯定是没有的,委托父类加载器去加载。拓展类也没有,然后委托引导类,引导类可以找到string类(原始string类),虽然原始类和我们写的类不是完全一样的类,但是它找到了(根据全路径=包名+类名去找---->java.lang.string.class),找到了以后就加载返回了,原始类肯定没有main方法,所以当你运行自己写的string类的时候,她就去jvm找,发现找不到main方法(原始类),所以就报错了。

由此,我们可以知道双亲委派的两个好处

1、沙箱安全机制

自己写的java.lang.String.class类不会被加载,这样便可以防止核心API库被随意篡改

2、避免类的重复加载

当父亲已经加载了该类时,子加载器就没有必要再加载一次,保证被加载类的唯一性

四、拓展

全盘负责委托机制

“全盘负责”是指当一个ClassLoder装载一个类时,除非显示的指定使用另外一个ClassLoder,该类所依赖及引用的类也由这个ClassLoder载入。

好啦,今天的内容就到这里啦,如果你喜欢我的分享,可以一键三连支持一下,你的支持就是我更新的动力,我们下期再见。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值