java的类加载机制

网上看了一篇介绍类加载机制的博文,介绍的跟清晰,记录下概要笔记

1、类加载机制是干嘛用的

2、有哪些类加载器

3、这些类加载器是如何工作的

4、如何实现自定义类加载器


1、java文件要想运行,是要先编译成class文件,我们的java程序打好jar包,启动时会有一个入口类入口函数,在这个类中会引入一些别的class文件的方法,

如何找到这一层一层关联的class文件加载到内存中捏,这就是类加载器的工作。

2、有3个默认的类加载器boostrap classloader、extention classloader、app classloader

boostrap classloader是C++代码写的加载器,内嵌到jvm中,是最开始的类加载器,它加载jdk中基本的class文件,如rt.jar、changset.jar、resources.jar

也就是说在jvm启动的时候就把这些基础的class类在到内存中。

extention classloader是集成classloader的最上层父类,它加载jdk下lib/ext路径下的class文件

app classloader也集成classloadrer,它加载指定classpath下class文件


3、工作的过程叫双亲委托模式,说白了就是加载的过程一层一层的委托找,首先是boostrap classloader,找不到,

交由extention classloader,找不到再委托给app classloader,默认的三个都找不到,看有没有自己实现的类加载器,都找不到的话,

程序会报classnofound异常。

那么问题来了,如果不同的类加载器加载类相同名字的类怎么办,或者说如何判定加载的类唯一呢!!!??

答案是必须满足两个条件:(1)类名一样 (2)类加载器一样,所以上面的问题加载是两个类,在程序中如果有这两个类的类型转换,赋值会报classcaseException


4、有可能程序要加载网络资源上的一些class类,这个需求就需要自己实现一个类加载器。

实现一个类加在器只要集成classloader类,实现其中的findlclass方法即可,方法里实现具体读取指定网络位置的class的过程。

其实web容器都有这些功能的类加载器,可以写个测试的servlet,打印出它自己调用的类加载器看看。


转载资源

http://www.importnew.com/15362.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值