类加载器、双亲委派模型

       

目录

应用程序类加载器 (系统类加载器) AppClassLoader

扩展类加载器 Extension ClassLoader

引导/启动类加载器 Bootstrap ClassLoader

双亲委派模型 


        一般来说java有着三层类加载器、双亲委派的类加载架构,今天我们来介绍一下是哪三层类加载器。

我们自定义一个类,然后通过类。class.getClassLoader查看我们自定类的类加载器,可以发现结果是AppClassLoader,然后我们查看系统类加载器结果也是AppClassLoader。这就是我们介绍的一个类加载器。

应用程序类加载器 (系统类加载器) AppClassLoader

① java语言编写

② 父类加载器为扩展类加载器

③ 负责加载环境变量classpanth或系统属性;java.class.path 指定路径下的类库

④ 该类加载器是程序中默认的类加载器,一般来说,java应用的类都是由它来完成的加载

⑤ 通过ClassLoader的getSystemClassLoader()可以获得该类加载器

然后我们获取系统类加载器的父类,就得到了Extension ClassLoader

扩展类加载器 Extension ClassLoader

① java语言编写获取

② 父类加载器为启动类加载器

③ 派生于ClassLoader类

那我们我们能获取到Extension ClassLoader的父类加载器吗,大家可以试一下,应该是获取不到的,这是因为他的父类加载器是Bootstrap ClassLoader,而他是由C++编写的。

引导/启动类加载器 Bootstrap ClassLoader

① C++语言实现,嵌套在JVM内部

② 用来加载Java核心库

③ 加载扩展类和应用程序类加载器,并指定为他们的父类加载器

④ 并不继承自java.lang.ClassLoader;没有父加载器

⑤ 处于安全考虑,Bootstrap启动类加载器值加载包名为java,javax,sun等开头的类

双亲委派模型 

        如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。  

        就比如我们上面自定义的类,他首先进入AppClassLoader,AppClassLoader有父类加载器,所以委派给他的父类加载器ExtClassLoader,ExtClassLoader也有自己的父类加载器,所以再委派给他的父类加载器Bootstrap ClassLoader,到了Bootstrap ClassLoader就不再向上委派了,Bootstrap ClassLoader查看类,发现不是自己管辖加载的范围,于是再向下委派,委派给到ExtClassLoader,ExtClassLoader查看类,也不是自己管辖加载的类,于是再次向下委派给到AppClassLoader,AppClassLoader查看类,发现是用户自定义的类,是自己需要加载的,于是加载自定义类。

好了,这次的文章就到这里,喜欢的同学可以点赞收藏,遇到问题,可以评论,或者留言,我一定会第一时间给到回馈,感谢观看!!

注:本文为本人学习时心得分享,有讲错或者需要改正的地方,请指正,我会虚心接受

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值