黑马程序员——类加载器初识

本文详细介绍了Java类加载器的工作原理,包括BootStrap、ExtClassLoader及AppClassLoader的作用及其加载流程,并探讨了类加载过程中的委托机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a&amp;gt;、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

java类加载器就是将.class文件中的二进制读入到内存中。

java类加载器也是类,它们是由最原始的类加载器加入到java虚拟机中,然后再由他们加载其他的类,而最原始的类加载器就是BootStrap,他不是Java类,是由C++编写的

在java中有三种类加载器:BootStrap(加载系统类,如System),ExtClassloader(加载lib/ext/里的.jar包),AppClassLoader(加载我们自定义的类)

BootStrap是ExtClassLoader的上级,ExtClassLoader是AppClassloader的上级

★这里有一个比较隐藏的问题,如果tomcat中启动,将java类打包成jar包放在jre\lib\ext文件夹中,这样ExtClassLoader就会加载,如果该类引用的其他类没有打包成jar放在ext文件夹中,这是浏览器就会报错了,必须将该类引用的其他类也打包才行。

printWriter out这个out是输出在浏览器上的,System.out这是输出在控制台上的

★当需要加载一个类时,首先会选择加载当前线程的类加载器加载该类,其次是选择引用了该类的其他类的类加载器。还可以使用ClassLoader.loadClass()指定使用哪一个加载器

当确定了使用哪一个类加载器时,就比如是AppClassLoader,他首先会委托上级ExtClassLoader加载该类,ExtClassLoader再委托他的上级BootStrap进行加载,,如果BootStrap这个加载器没有找到,就返回ExtClassLoader,如果他也没有找到,在返回AppClassLoader,由于AppClassLoader是发起者,如果他也没有找到,就不会再往下返回了,而是直接返回ClassNotFoundException。

★有个面试题:如果我们自己定义java.lang.System类,会不会被加载,答案是:通常来说是不会

java为了防止我们自己定义系统类,类加载器采用了委托机制,某一个类加载器加载的时候,首先会委托给其上级加载,如果其上级加载成功了,他就不会加载了,我们自己定义的System首先选择AppClassLoader加载器,他最终会委托给BootStrap加载器,BootStrap会将系统中的System类加载到虚拟机中,这样AppClassLoader就不会加载我们自己定义的System类了。但是我们也可以自己写一个类加载器,只要撇开了委托加载机制就可以了。

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a&amp;gt;、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值