博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小白讲java的双亲委派机制(言简意赅)
阅读量:3897 次
发布时间:2019-05-23

本文共 1135 字,大约阅读时间需要 3 分钟。

在我看来双亲委派机制的核心就是提高java运行的安全性,防止程序员自己写一些可能会和java初始下的一些类产生冲突的类。

对于双亲委派机制来说,需要先了解java的类加载器:
从java虚拟机的角度来说,只有两种不同的类加载器,一种是启动类加载器,是由c++语言实现的,另一种是其他所有的类加载器,是由java实现的。
但,我们一般是从开发者的角度来看的,这样子的话java的类加载器有四类:
1.启动类加载器(bootstrap):
是由c++编写的,相当于是最重要的加载器,是不允许直接引用
2.标准扩展类加载器(ext):
这个是可以直接使用的
3.应用程序类加载器(application):
在我看来和标准那个差不多,但是呢(更小一级),也是可以直接使用的,并且可以通过 getSystemClassLoader()方法返回。
4.自定义的类加载器
顾名思义,就是用户自己定义的

这几个关系基本上来说可以是:

在这里插入图片描述
由这个图可以看到,除了最上面的启动类加载器,每一个类加载器都有一个“父类加载器”,这也就引出了这个双亲委派机制。

双亲委派机制的流程:

其实也就是当一个类加载器收到了类加载的请求的时候,他不是直接进行加载,而是把这个请求委派给他的父类加载器去完成,而他的父类也有传到他的父类进行委派请求,知道收到父类自己反馈到自己无法完成这个请求,再回返回回去。

再具体一点就是,比如我们自己写了一个com.tets.T1类,并且我们自己没有写自定义类加载器,那么这个类就会被应用程序类加载器响应,并且应用程序加载器会把这个委派给扩展类加载器,然后扩展类也是把这个委派给了启动类加载器,启动类加载器没有父类可以委派了,他尝试着自己加载这个类(在自己的路劲里找这个类),然后发现找不到,也就是加载失败,就会又返回到扩展来加载,发现也在路劲下找不到,就又回到了应用程序类加载器,直到找到了,并把类加载出来。

在一个博客里看到一个更“形象的”:

可以把每个类加载都想成一个大懒汉,每次让他办事时他都让爸爸代办。没想到爸爸也是个大懒汉,于是爸爸也让他的爸爸代办。这是到了爷爷那里,爷爷也很懒,但是他没有爸爸了,于是只能一边抱怨一边干,然后发现自己做不了,又骂骂咧咧的把活儿交给了自己的儿子,然后爸爸开始干活,发现自己也不能完成这个任务,于是他也是骂骂咧咧的把活交给了儿子,儿子挨了一顿骂,然后开始干活,经过了1小时的苦干,这个活儿终于完事了

存在的意义:

好像看着特别复杂的样子,开发人员肯定是牺牲了这些,换取到了什么其他的优点,优点就是在于大大提高了安全性和稳定性,主要是让一些特定的类只能有一个存在于内存当中。专业的话叫做“有一种带有优先级的层次关系”

本条博客参考自:

转载地址:http://onfen.baihongyu.com/

你可能感兴趣的文章
clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结
查看>>
运算符重载参数的顺序对运算是否有影响
查看>>
什么时候要用虚析构函数?
查看>>
序列化、反序列化与jsoncpp学习
查看>>
同步/异步与阻塞非阻塞的关系
查看>>
epoll模型讲解/源码分析
查看>>
ELF格式与bss段
查看>>
java继承 long和float小记点
查看>>
记录几点在开发中遇到的问题 2015-7-28 (会更新)
查看>>
网银在线的异步操作代码示意图
查看>>
火狐Firefox浏览器安装Selenium_IDE的步骤以及其使用规则
查看>>
记录运行代码的时间长短
查看>>
关于yii2的一些知识的学习笔述
查看>>
用纯php实现MVC框架,文件目录模仿yii2
查看>>
新开发的体重管理项目----用纯php模仿yii2框架建立的
查看>>
JavaScript面向对象编程指南 的笔记
查看>>
在 2016 年做 PHP 开发是一种什么样的体验?(一)
查看>>
PHP获取客户端的IP
查看>>
从头开始学习yii2---1.搭建yii2开发环境
查看>>
从头开始学习yii2---3.语言包的配置
查看>>