Java中的类加载器.pdfVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档