我知道 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
。
hasloadClass()
方法的方法,但也没有调用。ClassLoader
findLoadedClass