当加载 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);
当加载 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);