有 1000 万篇关于Java 类加载器是什么以及如何/*为什么*编写自己的类加载器的文章和文档……但它们似乎都在假设一些我无法找到简单答案的事情!
我了解类加载器的工作:读取字节码并从中构造一个对象。不同的类加载器以不同的方式执行此操作,等等。
但是我从来不需要在我自己的代码中针对类加载器 API 编写代码,也从来不需要编写自己的代码,我很难理解自己的代码何时ClassLoader
真正触发。
例如:
public static void main(String[] args) {
Fizz fizz = new Fizz();
fuzz.buzz();
}
在这里,我们有一个Fizz
对象。在Fizz
实例化 a 之前,我们需要一个类加载器来启动并加载Fizz.class
到它的缓存中。这发生在何时何地?!?!它在我的代码中没有明确显示,所以它必须隐含在 JRE 中的某个地方......?
与该问题相切,如果我编写自己的类加载器,例如,WidgetClassLoader
并希望将其配置为加载我的所有应用程序的类,或者只是我的Fizz.class
,我如何将它“绑定”WidgetClassLoader
到我的应用程序中,以便它知道要使用哪个类加载器? 我的代码需要显式调用这个类加载器还是像第一个示例一样隐含?提前致谢!