我们都知道java的类载入器共同拥有三级,各自是bootstrap (引导类)载入器、extension(扩展类)载入器和 system (系统类)载入器。这三个载入器是父子关系,当中 bootstrap 类载入器在顶端,而 system 载入器在结构的最底层。同一时候他们都採取向上传递的机制,即有了要载入的类,先问问自己的父载入器,若父载入器不能载入,自己再载入。

我们写了一个helloworld类,载入的时候,二进制字节码送给系统类载入器,可是系统类会询问它的父载入器(扩展类)你能载入不?扩展类载入器也会询问自己的父载入器(引导类)你能载入不?
通俗的说,引导扩展系统三个载入器就像爷爷父亲孙子一样,他们载入非常孝顺,载入类的时候都先让长辈载入,长辈不能载入自己才会去载入。
这样做有什么优点么?
假设你写了一个全名为java.lang.Object的类,里面有一些危急代码,载入时首先会是系统类载入器尝试载入..最后是引导类来载入,它会依照路径直接去C:\Program Files\Java\jdk1.7.0_15\jre\lib\rt.jar这个位置里去找java.lang.Object。总而言之,安全!

public class Property
{public static void main(String[] args){System.out.println("boot "+System.getProperty("sun.boot.class.path"));System.out.println("ext "+System.getProperty("java.ext.dirs"));System.out.println("system "+System.getProperty("java.class.path"));try{System.out.println(Class.forName("Property").getClassLoader()+"PPP");}catch (Exception e){e.printStackTrace();}}
}

执行结果

boot C:\Program Files\Java\jdk1.7.0_15\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_15\jre\lib\rt.jar;C:\Program Files\Java\jdk1.7.0_15\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.7.0_15\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_15\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_15\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_15\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_15\jre\classes

ext C:\Program Files\Java\jdk1.7.0_15\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext

system .;C:\Program Files\Java\jdk1.7.0_15\lib\dt.jar;C:\Program Files\Java\jdk1.7.0_15\lib\tools.jar;C:\Program Files\Java\jdk1.7.0_15\jre\lib\rt.jar;E:\apache-tomcat-7.0.47_8700\lib\servlet-api.jar;
sun.misc.Launcher$AppClassLoader@fb56b1PPP
通过上面的样例,大家就知道了三级载入器的载入范围;

如今我有一个想法,假设咱们把Property类的class文件放到扩展类载入器的文件夹下,那它是不是就会被扩展类载入器所载入呢?

ok,我把Property类的class文件放到扩展类载入器的文件夹下,结果不变;
奇怪了,不是说好了扩展载入器载入 C:\Program Files\Java\jdk1.7.0_15\jre\lib\ext这个文件夹下的文件吗?

要不,压缩成jar文件?

要不,换个压缩方式?

例如以下图
如今我们至少能知道几个问题

1 在扩展类载入器的载入文件夹下,仅仅认jar格式的文件,class文件不看

2 jar还得是zip的压缩格式!

.... 就为了这么一点小问题 我花了快2个小时 羞愧

转载于:https://www.cnblogs.com/jhcelue/p/7268007.html

扩展类载入器的载入问题相关推荐

  1. java类载入器——ClassLoader

    Java的设计初衷是主要面向嵌入式领域,对于自己定义的一些类,考虑使用依需求载入原则.即在程序使用到时才载入类,节省内存消耗,这时就可以通过类载入器来动态载入. 假设你平时仅仅是做web开发,那应该非 ...

  2. java载入器材_JAVA之了解类载入器Classloader

    1.类的载入.连接和初始化 类初始化通常包含载入.连接.初始化三个步骤. (1)进程的结束 每当执行一个java程序时,将会启动一个java虚拟机进程,无论程序多么复杂.有多少线程.都在这个java虚 ...

  3. tomcat(8)载入器

    [0]README 0.0)本文部分描述转自"深入剖析tomcat",旨在学习 tomcat(8)载入器 的基础知识: 0.1)一个标准web 应用程序中的载入器:简单来说就是 t ...

  4. Tomcat类载入器(转载)

    1 - Tomcat的类载入器的结构 Tomcat Server在启动的时候将构造一个ClassLoader树,以保证模块的类库是私有的 Tomcat Server的ClassLoader结构如下: ...

  5. 引导类、扩展类、系统类加载器的使用及演示

    一.启动类加载器(引导类加载器, Bootstrap ClassLoader) 1.这个类是使用c/c++语言实现的, 嵌套在JVM内部. 2.它用来加载java的核心库(java_home/jre/ ...

  6. objective-c中Category类别(扩展类)专题总结

    objective-c中Category类别(扩展类)专题总结 objective-c中Category 类别.扩展 专题总结 http://blog.csdn.net/jiajiayouba/art ...

  7. python类装饰器详解-Python类装饰器实现方法详解

    本文实例讲述了Python类装饰器.分享给大家供大家参考,具体如下: 编写类装饰器 类装饰器类似于函数装饰器的概念,但它应用于类,它们可以用于管理类自身,或者用来拦截实例创建调用以管理实例. 单体类 ...

  8. python装饰器类-python装饰器2:类装饰器

    本文是装饰器相关内容的第二篇,关于类装饰器. "类装饰器"有两种解读方式:用来装饰类的装饰器:类作为装饰器装饰其它东西.你如何认为取决于你,两种说法都有出现在其它的文章中.我的文章 ...

  9. python类装饰器详解-Python装饰器基础概念与用法详解

    本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自 ...

最新文章

  1. 蓝牙模块引起电路干扰
  2. 如何解决实时历史数据库存储成本问题?
  3. Ionic 用于构建惊人的移动应用程序的顶级开源框架
  4. VTK:可视化算法之VelocityProfile
  5. python做公司内部系统错误_Python程序可能导致文件系统错误?
  6. 2011年Android手机用户购买行为研究报告
  7. ICCV 2019 VisDrone挑战赛冠军方案解读
  8. 【人脸表情识别】基于matlab GUI CNN人脸表情识别【含Matlab源码 787期】
  9. 宏正ATEN推出ALTUSEN系列 全面冲刺KVM高端市场
  10. 传奇GOM引擎授权过期解决方法.
  11. 思考篇|姜子牙观影后感
  12. 使用window.close()关闭标签页的注意事项
  13. 【分享】VMOS Pro1.4.2最新会员版
  14. 实现手机来电铃声,通知铃声、警告铃声等音频定制化功能(三,多媒体扫描结果定制处理)
  15. 【JZOJ3794】【洛谷P1383】高级打字机【主席树】
  16. 修复压缩文件提示:现校验和错误。该文件已损坏
  17. Jetbrains系列产品
  18. 分享][转帖] 无光驱安装系统的方法
  19. (精)反激式开关电源
  20. 【JavaScript基础-二维数组】JavaScript修改二维数组的某个元素时,其上下元素也受到影响

热门文章

  1. 关于json时间字符串格式化处理
  2. latex python_怎么在 LaTeX 中排版 Python 代码?
  3. mysql有符号数_mysql里面有符号整数类型有关问题,请指点,多谢
  4. 服务器系统关了,各种服务器系统的关机
  5. js获得服务器时间并实时更新
  6. app传输数据到php,安卓app客户端和使用php的服务器端数据交互
  7. linux系统中删除一次性任务流程,Linux系统中的计划任务
  8. 服务器的安装文件,服务器存储安装文件
  9. c++ 删除vector里面的第一个元素_C++提高第三篇2 STL常用容器 vector
  10. java环境变量win8_win8java环境变量设置