JAVA加强——类加载器

类加载器


每个类都有一个加载器来进行加载的。

加载器也是一个类,也需要一个加载器来加载这个加载器的类。

所以,最一开始有一个加载器,是用来加载其他加载器的顶级加载器。这个加载器叫:Bootstrap。


加载器也分不同管辖范围,Bootstrap是最顶级的加载器,他下面还有一个加载器,叫:ExtClassLoader。他是Bootstrap的子类。

ExtClassLoader下面也有个子类加载器,叫AppClassLoader。他是ExtClassLoader的子类加载器。

这三个加载器管理的类也不同,分别以不同文件夹来区分。

如下图



运行原理(委托机制):

上图三个加载器分别对应三个不同的路径地址,每个加载器都从自己的路径下找类文件来加载。

当系统需要对类进行加载时,是有一个规则的。这个规则就是以上图三个主要加载器的关系来进行的。

如果需要加载一个类,系统会先从Bootstrap开始。如果Bootstrap对应的那个文件夹下有这个类文件。那么久直接加载了。

如果Bootstrap没有。交给ExtClassLoader。如果ExtClassLoader没有。再交给AppClassLoader。

一般咱们新建的类,都是在AppClassLoader这个加载器路径下存储的,所以都用AppClassLoader这个加载器。


那么,当有人问你,你可以新建一个System类么。答案是不行的。因为System在最顶级的Bootstrap加载器的路径中已经有了,按照原则,从上到下,系统会使用Bootstrap直接进行加载,所以你写了以后,也不会被加载,加载的还是在Bootstrap目录下的system类。

但是,你可以自己做一个加载器来加载System类。如果有必要的话。


这就是加载器的委托机制。


补充:

当你有个类叫A,A类里面引用了类B,那么B类的加载器延用A类的加载器。

同时,可以调用ClassLoader.loadClass()方法来指定某个加载器去加载某个类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值