快速业务通道

深入探讨Java类加载器 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

深入探讨Java类加载器

时间:2011-06-12 IBM 成富

类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。 它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java Applet 需要从远程下载 Java 类文件到浏览器中并执行。现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用。一般来说,Java 应用的开发人员不需要直接同类加 载器进行交互。Java 虚拟机默认的行为就已经足够满足大多数情况的需求了。 不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很 了解的话,就很容易花大量的时间去调试 ClassNotFoundException 和 NoClassDefFoundError 等异常。本文将详细介绍 Java 的类加载器,帮助读者 深刻理解 Java 语言中的这个重要概念。下面首先介绍一些相关的基本概念。

类加载器基本概念

顾名思义,类加载器(class loader)用来加 载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如 下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示一个 Java 类。通过 此实例的 newInstance()方法就可以创建出该类的一个对象。实际的情况可能更 加复杂,比如 Java 字节代码可能是通过工具动态生成的,也可能是通过网络下 载的。

基本上所有的类加载器都是 java.lang.ClassLoader 类的一个实 例。下面详细介绍这个 Java 类。

java.lang.ClassLoader 类介绍

java.lang.ClassLoader 类的基本职责就是根据一个指定的类的名称, 找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个 Java 类, 即 java.lang.Class 类的一个实例。除此之外,ClassLoader 还负责加载 Java 应用所需的资源,如图像文件和配置文件等。不过本文只讨论其加载类的功能。 为了完成加载类的这个职责,ClassLoader 提供了一系列的方法,比较重要的方 法如 表 1 所示。关于这些方法的细节会在下面进行介绍。

表 1. ClassLoader 中与加载类相关的方法

方法 说 明
getParent() 返回该类加载器的父类加载器。
loadClass(String name) 加载名称为 name 的类 ,返回的结果是 java.lang.Class 类的实例。
findClass (String name) 查找名称为 name 的类,返回的结果是 java.lang.Class 类的实例。
findLoadedClass(String name) 查找名称为 name 的已经被加载过的类,返回的结果是 java.lang.Class 类的实例。
defineClass(String name, byte[] b, int off, int len) 把字节数组 b 中的内容转换成 Java 类,返回的结果是 java.lang.Class 类的实例。这个方法被声明为 final 的。
resolveClass(Class<?> c) 链接指定的 Java 类。

对于 表 1 中给出的方法,表示类名称的 name 参数的值是类的二进制名称。需要注意的是内部类的表示,如 com.example.Sample$1 和 com.example.Sample$Inner 等表示方式。这些方法 会在下面介绍类加载器的工作机制时,做进一步的说明。下面介绍类加载器的树 状组织结构。

深入探讨Java类加载器(2)

时间:2011-06-12 IBM 成富

类加载器的树状组织结构

Java 中的类加载器大致 可以分

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号