大家好 目前在看关于java虚拟机的书籍
书上说 个各类装载器都使用单独的命名空间 一个类型无法看到不在同一个命名空间装载的其它类型
书上还说 没个被加载到方法区的class类型都有一个常量区 常量区中存放着其他类型的名字 字段 方法
在jvm解析阶段 需要把常量区中的其它类型的符号引用指向正确的类型地址 而且在解析过程中使用当前类的classLoader的命名空间去搜索和加载其它类型 比如Cat类是被一个用户自定义的类加载器加载的,当虚拟机解析指向Mouse的引用时,会检查Mouse是否已经被Cat所属的命名空间加载 如果没有 就是用Cat的类加载器加载Mouse类 即使Mouse已经被加载到另一个命名空间中
于是我写了一个测试小程序
public class Test {
public static void main(String[] args) throws Exception{
Object o = new Object();
List<String> l = new ArrayList<String>();
System.out.println(o.getClass().getClassLoader());
System.out.println(l.getClass().getClassLoader());
System.out.println(Test.class.getClassLoader());
}
}
为什么Test类使用的是AppClassLoader 而Object 和 List 还是使用的Bootstrap ClassLoader? 和上面的观点有矛盾啊
请大侠帮助解决 小弟谢谢了