码迷,mamicode.com
首页 > 其他好文 > 详细

ClassLoader

时间:2017-07-03 18:10:41      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:系统   bootstra   之间   依次   请求   四种   结果   虚拟机   blog   

 

 

什么是类加载器

java类加载器是通过一个类的全限定名来获取描述此类的二进制字节流,来进行加载;

加载器是在虚拟机外部实现的,方便让程序自己决定获取所需要的类。

 

 

JAVA有哪些类加载器

 对于开发人员来说,java的类加载器有四种,全都继承自抽象类java.lang.ClassLoader:

 

启动类加载器(Bootstrap ClassLoader)


它是虚拟机的一部分,无法被Java程序直接引用,所以System.class.getClassLoader()结果为null;

负责加载JAVA_HOME\lib目录中规定的类库,例如rt.jar的java.lang.object等核心api。

 

 

扩展类加载器(Extension ClassLoader)


 负责加载<JAVA_HOME>\lib\ext目录,可以被开发人员直接使用。

 

 

程序类加载器(Application ClassLoader)


 程序默认的加载器,负责加载ClassPath下的类或jar,可以被开发人员直接使用。

 

 

自定义类加载器


 

 

 

类加载器之间的关系

启动类加载器 > 扩展类加载器 > 程序类加载器 >自定义类加载器:

它们之间不是继承关系,而是通过组合实现的,而这种模型也被称为双亲委派,如下图:

技术分享

 

 

 

双亲委派模型

 

概念


双亲委派的代码逻辑在java.lang.ClassLoader.loadClass()中;

他是说某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归;

如果父类加载器可以完成类加载任务,就成功返回;

只有父类加载器无法完成此加载任务时,才自己去加载。

 

 

为什么使用双亲委派


因为java的设计体系,比如继承,所有的类都必须继承object类,那就必须确定object是唯一的,否则我们怎么知道该继承哪个object;

而双亲委派会把加载类递归交给上一层加载器去做,如果加载不了,就自己完成,这一确保了类在系统中的唯一性。

 

ClassLoader

标签:系统   bootstra   之间   依次   请求   四种   结果   虚拟机   blog   

原文地址:http://www.cnblogs.com/dahuandan/p/7112245.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!