当加载 java class 时,它是否也加载在此 class 中仅引用(但未实例化)的 class?

When a java class gets loaded, does it load the class only referenced (but not instantiated) in this class as well?

当加载 java class 时,它是否也加载在此 class 中仅引用(但未实例化)的 class?我发现在实例化引用的 class 或为任何静态字段分配值之前,它不会加载。但是,我了解到这种行为因 JVM 而异。是真的吗?

类 仅在 使用 时加载。

通过让 ClassLoader 打印它正在做什么,您可以很容易地进行自己的实验 "prove";请参阅 here 了解其工作原理。

认为这是一个指定属性的JVM;意思是:所有 JVM 都应该这样做(详情请参阅 here)。

你看 - 其他任何事情都没有意义。一些 class A 可能引用 10、20 个其他 classes。您真的要在加载 A 时加载所有这些 classes 吗?以及 A 的那些引用所引用的所有 10、20 classes?!不知道您是否会需要它们?!

有这两个重载方法加载class.

loadClass(name, resolve);
loadClass(name);

这里 resolve 是一个布尔标志,当它为真时,它也会解析所有引用的 classes。当它为 false 时,它​​不会加载引用 classes.

请注意,对于您要加载的任何 class,resolve 变量将始终为真。只有当系统递归调用 loadClass() 时,它才可能将此变量设置为 false,因为它知道它要求的 class 已经被解析。

Here, loadClass(name); calls loadClass(name, false);