java类加载器的树状组织结构
Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。那么java类加载器有哪些,下面本站小编为大家一一解读!
系统提供的类加载器主要有下面三个:
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 sLoader。扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ystemClassLoader()来获取它。除了系统提供的类加载器以外,开发人员可以通过继承 sLoader类的方式实现自己的类加载器,以满足一些特殊的需求。
除了引导类加载器之外,所有的类加载器都有一个父类加载器。通过 表 1中给出的 getParent()方法可以得到。对于系统提供的类加载器来说,系统类加载器的父类加载器是扩展类加载器,而扩展类加载器的父类加载器是引导类加载器;对于开发人员编写的类加载器来说,其父类加载器是加载此类加载器 Java 类的`类加载器。因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。树的根节点就是引导类加载器。图 1中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。
图 1. 类加载器树状组织结构示意图
代码清单 1演示了类加载器的树状组织结构。
清单 1. 演示类加载器的树状组织结构
public class ClassLoaderTree {
public static void main(String[] args) {
ClassLoader loader = ClassLoaderTree. class lassLoader();
while (loader != null ) {
tln(ring());
loader = arent();
}
}
} |
每个 Java 类都维护着一个指向定义它的类加载器的引用,通过 getClassLoader()方法就可以获取到此引用。代码清单 1中通过递归调用getParent()方法来输出全部的父类加载器。代码清单 1的运行结果如 代码清单 2所示。
清单 2. 演示类加载器的树状组织结构的运行结果
cher$AppClassLoader @9304b1
cher$ExtClassLoader @190d11
|
如 代码清单 2所示,第一个输出的是 ClassLoaderTree类的类加载器,即系统类加载器。它是 cher$AppClassLoader类的实例;第二个输出的是扩展类加载器,是 cher$ExtClassLoader类的实例。需要注意的是这里并没有输出引导类加载器,这是由于有些 JDK 的实现对于父类加载器是引导类加载器的情况,getParent()方法返回 null。
-
H3C中小企业无线解决方案
根据中国互联网络信息中心(CNNIC)公布的数据,截至2008年6月底,中国网民数量达到了2.53亿,首次大幅度超过美国,跃居世界第一位。中国也真正地步入网络时代。其中WLAN网络在提高企业效率、降低企业成本、提高用户满意度等方面有着突出的作用。那么随着网络使用范围的...
-
2017华为认证资深网络工程师联络中心模拟试题及答案
1、(题型:单选)eSpaceU2990是华为语音通信领域的旗舰级平台,支持()。A.宽带接入,但不支持窄带接入B.窄带接入,但不支持宽带接入C.宽窄带一体化接入,但不面向NGN网络D.宽窄带一体化接入,面向NGN网络2、(题型:单选)eSpaceU2990比通用服务器更好的保证系统的大容量、安全...
-
2016年计算机等级考试二级VFP笔试试题及答案
2016年计算机二级VF考试就要到了,为帮助大家巩固计算机VF知识点,本站小编为大家分享最新的VF考试题库及答案,仅供参考!一、选择题(每小题2分,共70分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1...
-
我的JavaEE学习路线图
从学习Java开发到现在虽然也已经快三年了,但是要说到分享一下经验实在是不敢当。权当是对自己的一个总结吧,希望大家不吝指教,互相交流。照旧,还是现来整理一下我学习Java的一个路线图吧,然后按照这个路线图来谈谈我的一些感受。一、Java核心这是学习Java的基础,掌握...