- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入探讨Java类加载器.doc
?
深入探讨 Java 类加载器
javaclassloaderstringosgi虚拟机class
? ? ? ? 类加载器是 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所示。关于这些方法的细节会在下面进行介绍。
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 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自java.lang.ClassLoader。
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,J
您可能关注的文档
最近下载
- 草牧场转让合同5篇.docx VIP
- (四级)保育师理论学习考试题库(浓缩300题).docx VIP
- 2025四级保育师资格考试题库及答案(浓缩400题).docx VIP
- 实施指南《GB_T10068-2020轴中心高为56mm及以上电机的机械振动振动的测量、评定及限值》实施指南.docx VIP
- 中小学生常见病防治课件.pptx VIP
- 1.1 原始社会的解体和阶级社会的演进:原始社会 课件-【新教材】高中政治统编版(2019)必修一(共29张PPT).pptx VIP
- 铝方通吊顶施工技术交底.pptx VIP
- DB23T1501-2013 水利堤(岸)坡防护工程格宾与雷诺护垫施工技术规范.pdf VIP
- 华为极简站点解决方案opm200.pdf VIP
- 北师大版七年级数学下册第二章测试题及答案下载.doc VIP
文档评论(0)