JVM6(ClassLoader双亲委托机制)

本文深入探讨了Java类加载器的层次结构,包括根类加载器、扩展类加载器和系统类加载器之间的关系,以及类加载过程中的双亲委托机制。详细解释了类加载器如何加载位于lib t.jar中的核心Java类,并介绍了Class类的getClassLoader方法的使用,以及类加载与类初始化的区别。

在这里插入图片描述

在这里插入图片描述

根类加载器 —— 扩展类加载器 (有继承ClassLoader)—— 系统类加载器(有继承ClassLoader) —— 自定义类加载器(有继承ClassLoader),他们之间不是继承关系是包含关系!

启动类加载器(根加载器)是有C++实现的,它是顶层类加载器,双亲委托机制是当前类加载器加载一个类时判断该自己是否有父加载器,如果有就委托父加载器去加载,以此类推。直到委托到根类加载器。然后根类加载器试着去加载,如果加载不了,再给他的子类去加载,以此类推,如果有一个加载器加载成功了,把加载成功的消息返回给第一次加载该类的加载器。如果都没有加载成功,JVM就会抛出异常。

根加载器加载的是\lib\rt.jar中的类,这个包下面就是我们平时用的Java类

Class类中的getClassLoader方法:如果该类的加载器为跟类加载器,将会返回null。因为根类加载器是由C++实现的,没有Java实现类,原生类型是没有类加载器的,也为null。

在这里插入图片描述
getClassLoader()的官方描述

调用classLoader的loadclass方法并不会导致类的初始化,这不是主动使用一个类。但是用Class.forName方法却会导致类的初始化,这是反射是主动使用一个类。

在这里插入图片描述
下面是用ClassLoader获取.class文件的真实路径
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值