【发布时间】:2013-09-14 01:18:46
【问题描述】:
我知道 Java 使用 ClassLoader 层次结构来加载类。
例如一个程序:
public void test(){
A a = new A(); // Line 1 The class is accessed first time here so it should be loaded and defined
A ab = new A(); //Line 2 How can the second line be represented?
}
第一行代码类似
Thread.currentThread().getContextClassLoader().loadClass("A");
所以类被加载并定义为创建Class的实例。
现在的问题是,当第二行执行时,Class A 再次被引用,Java 会不会再次查找该类并返回该类的相同加载实例?
正如 Java 类加载器文档所说,每个类加载器都应该维护已加载类的实例,并为下一次调用返回相同的实例。
Java 将加载的类保存在哪里? ClassLoader 类有一个 Vector 类,VM 调用它来添加加载的类。
也许这个问题有点令人困惑,基本上我是想弄清楚已经加载的类是从哪个方法返回的。我试图在loadClass() 方法中保留一个调试点,但Line 2 没有调用它。
ClassLoader 的 loadClass() 方法有 findLoadedClass 方法,但也没有调用。
【问题讨论】:
标签: java class classloader