gpt4 book ai didi

java - Java 如何找到已经加载的类?

转载 作者:行者123 更新时间:2023-12-04 04:42:18 25 4
gpt4 key购买 nike

我知道 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类(class)有 Vector由 VM 调用以添加加载的类的类。

也许这个问题有点令人困惑,基本上我想弄清楚已经加载的类是从哪个方法返回的。我试图在 loadClass() 中保留一个调试点方法,但没有为 Line 2 调用它.
loadClass() ClassLoader的方法有 findLoadedClass方法,但也没有调用。

最佳答案

如果您想“翻译”提及 A任何方法调用,那么你能得到的最接近的不是 loadClass()但是 Class.forName() .

这个方法调用查询类的类加载器,这可能会也可能不会触发类加载(调用者甚至不在乎)。它将简单地将一个完全加载(并初始化,如果您不使用 the three-argument version )的类返回给调用者。

一旦类被加载,当类被使用时不再调用类加载器(顾名思义,一旦加载了类,它的工作就完成了)。

关于java - Java 如何找到已经加载的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18717082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com