A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xplcc 中级黑马   /  2014-9-16 22:43  /  535 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

JVM去查询类的原理,编译器加载类要依靠classloader   classloader3个级别,从高到低分别是BootClassLoader(名字可能不准确)   ,   ExtClassLoader,   AppClassLoader.
3个加载器分别对应着编译器去寻找类文件的优先级别和不同的路径:BootClassLoader对应jre/classes路径,是编译器最优先寻找class的地方
ExtClassLoader
对应jre/lib/ext路径,是编译器次优先寻找class的地方
AppClassLoader
对应当前路径,所以也是编译器默认找class的地方
其实大家可以自己写个程序简单的测试,对任何class,例如A,  
调用new   A().getClass().getClassLoader().toString()   打印出来就可以看到,把class文件放在不同的路径下再次执行,就会看到区别。特别注意的是如果打印出来是null就表示到了最高级 BootClassLoader,   因为它是C++编写的,不存在Java对应的类加载器的名字。
寻找的顺序是一种向上迂回的思想,即如果本级别找不到,就只能去本级别之上的找,不会向下寻找。不过似乎从Jdk1.4Jdk1.6这一特点又有改变,没有找到详细资料。所以就不举例子了。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马