- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java中的类加载器
Java 中的类加载器
从 Java 的动态性到类加载机制
Java 是一种动态语言。那么怎样理解这个 “动态”呢?或者说一门语言具备了什么特性,才能称之为动态语言呢?对于
java ,我是这样理解的。
JVM (java 虚拟机)执行的不是本地机器码指令,而是执行一种称之为字节码的指令(存在于 class 文件中)。这就要
求虚拟机在真正执行字节码之前,先把相关的 class 文件加载到内存中。虚拟机不是一次性加载所有需要的 class 文件,因为
它在执行的时候根本不会知道以后会用到哪些 class 文件。它是每用到一个类,就会在运行时 “动态地”加载和这个类相关
的 class 文件。这就是java 被称之为动态性语言的根本原因。除了动态加载类之外,还会动态的初始化类,对类进行动态链
接。动态初始化和动态链接放在其他文章中进行介绍。本文中只关心类的加载。
在 JVM 中负责对类进行加载的正是本文要介绍的类加载器(ClassLoader ),所以,类加载器是JVM 不可或缺的重要组件。
Java 中的类加载器及类加载器工作原理
java 中(指的是javase )有三种类加载器。每个类加载器在创建的时候已经指定他们对应的目录, 也就是说每个类加载器去
哪里加载类是确定的,我认为在 ClassLoader 类中应该会有 getTargetPath()之类的方法, 得到他们对应的路径,找了找jdk
的文档,发现是没有的。以下是这三种类加载器和他们对应的路径:
* AppClassLoader -- 加载 classpath 指定的路径中的类
* ExtClassLoader -- 加载jre/l ib/ext 目录下或者java.ext.dirs 系统属性定义的目录下的类
* BootStrap -- 加载 JRE/lib/rt.jar 中的类
那么类加载器是如何工作的呢?可以参看jdk 中ClassLoader 类的源码。这个类的实现使用了模板方法模式,首先是
loadClass 方法来加载类,loadClass 方法又调用了 findClass 方法,该方法读取并返回类文件的数据,findClass 方法返回
后,loadClass 方法继续调用 defineClass 方法,将返回的数据加工成虚拟机运行时可识别的类型信息。所以,我们如果开
发自己的类加载器,只需要继承jdk 中的ClassLoader 类,并覆盖 findClass 方法就可以了,剩下的而工作,父类会完成。
其他java 平台有的根据自己的需求,实现了自己特定的类加载器,例如javaee 平台中的 tomcat 服务器,Android 平台中
的 dalvik 虚拟机也定义了自己的类加载器。
虚拟机加载类有两种方式,一种方式就是上面提到的ClassLoader.loadClass()方法,另一种是使用反射API ,Class.forName()
方法,其实 Class.forName()方法内部也是使用的 ClassLoader。Class 类中 forName 方法的实现如下:
1. public static Class? forName(String name, boolean initialize,
2. ClassLoader loader)
3. throws ClassNotFoundException
4. {
5. if (loader == null) {
6. SecurityManager sm = System.getSecurityManager();
1 / 8
7. if (sm != null) {
8. ClassLoader ccl = ClassLoader.getCallerClassLoader();
9. if (ccl != null) {
10. sm.checkPermission(
11. SecurityConstants.GET_CLASSLOADER_PERMISSION);
12. }
13. }
14. }
15. re
您可能关注的文档
最近下载
- Tepla® T2020GF 15TF | PPS 20%GF(玻璃纤维)物性表.pdf VIP
- 水上光伏预制管桩施工方案.docx VIP
- 《电气与电子测量技术(第3版)》完整版课件全套电子教案.pptx
- DB42∕T 562-2009 土地整治通用工程施工质量检验标准.pdf VIP
- 新教材人教A版高中数学选择性必修第1册教材课后习题答案.pdf
- 220kV及以上输变电线路工程档案资料编2023.pdf VIP
- 公司资产转让协议书(精选6篇).pdf VIP
- 地铁屏蔽门系统介绍.pptx VIP
- 商务沟通与谈判及参考答案全套教学课件.ppt VIP
- 地下车库地坪做法-建筑工程防空鼓开裂控制标准.pdf VIP
文档评论(0)