深入了解类加载器

深入了解类加载器

ID:9361637

大小:83.10 KB

页数:12页

时间:2018-04-29

深入了解类加载器_第1页
深入了解类加载器_第2页
深入了解类加载器_第3页
深入了解类加载器_第4页
深入了解类加载器_第5页
资源描述:

《深入了解类加载器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、深入探讨Java类加载器类加载器是Java语言的一个创新,也是Java语言流行的重要原因之一。它使得Java类可以被动态加载到Java虚拟机中并执行。类加载器从JDK1.0就出现了,最初是为了满足JavaApplet的需要而开发出来的。JavaApplet需要从远程下载Java类文件到浏览器中并执行。现在类加载器在Web容器和OSGi中得到了广泛的使用。一般来说,Java应用的开发人员不需要直接同类加载器进行交互。Java虚拟机默认的行为就已经足够满足大多数情况的需求了。不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花

2、大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。本文将详细介绍Java的类加载器,帮助读者深刻理解Java语言中的这个重要概念。下面首先介绍一些相关的基本概念。类加载器基本概念顾名思义,类加载器(classloader)用来加载Java类到Java虚拟机中。一般来说,Java虚拟机使用Java类的方式如下:Java源程序(.java文件)在经过Java编译器编译之后就被转换成Java字节代码(.class文件)。类加载器负责读取Java字节代码,并转换成java.lang.Class类的一个实例

3、。每个这样的实例用来表示一个Java类。通过此实例的 newInstance()方法就可以创建出该类的一个对象。实际的情况可能更加复杂,比如Java字节代码可能是通过工具动态生成的,也可能是通过网络下载的。基本上所有的类加载器都是 java.lang.ClassLoader类的一个实例。下面详细介绍这个Java类。java.lang.ClassLoader类介绍java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个Java类,即 java.lang.Class类的一个实例。

4、除此之外,ClassLoader还负责加载Java应用所需的资源,如图像文件和配置文件等。不过本文只讨论其加载类的功能。为了完成加载类的这个职责,ClassLoader提供了一系列的方法,比较重要的方法如 表1所示。关于这些方法的细节会在下面进行介绍。表1.ClassLoader中与加载类相关的方法方法说明getParent()返回该类加载器的父类加载器。loadClass(Stringname)加载名称为 name的类,返回的结果是 java.lang.Class类的实例。findClass(Stringname)查找名称为 name的类,返回的结果是 ja

5、va.lang.Class类的实例。findLoadedClass(Stringname)查找名称为 name的已经被加载过的类,返回的结果是 java.lang.Class类的实例。defineClass(Stringname,byte[]b,intoff,intlen)把字节数组 b中的内容转换成Java类,返回的结果是 java.lang.Class类的实例。这个方法被声明为 final的。resolveClass(Classc)链接指定的Java类。对于 表1中给出的方法,表示类名称的 name参数的值是类的二进制名称。需要注意的是内部类的表示,

6、如 com.example.Sample$1和com.example.Sample$Inner等表示方式。这些方法会在下面介绍类加载器的工作机制时,做进一步的说明。下面介绍类加载器的树状组织结构。类加载器的树状组织结构Java中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java应用开发人员编写的。系统提供的类加载器主要有下面三个:·引导类加载器(bootstrapclassloader):它用来加载Java的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。·扩展类加载器(extensionsclasslo

7、ader):它用来加载Java的扩展库。Java虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载Java类。·系统类加载器(systemclassloader):它根据Java应用的类路径(CLASSPATH)来加载Java类。一般来说,Java应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。除了系统提供的类加载器以外,开发人员可以通过继承 java.lang.ClassLoader类的方式实现自己的类加载器,以满足一些特殊的需求。除了引导类加载器之外,所有的类加载器都有一

8、个父类加载器。通过 表1中给出的 ge

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。