当一个java类被加载时,它是否也加载了这个类中仅引用(但未实例化)的类?

时间:2016-09-18 06:17:04

标签: java classloader

当java类被加载时,它是否也加载了这个类中仅引用(但未实例化)的类?我发现它没有加载,直到引用的类被实例化或任何静态字段被赋值。但是,我了解到这种行为会将JVM改为JVM。这是真的吗?

2 个答案:

答案 0 :(得分:0)

只有在使用时才会加载类。

通过让ClassLoader打印它正在做的事情,可以很容易地进行自己的实验来“证明”这个实验。请参阅here了解其工作原理。

认为这是JVM的指定的属性;意思是:所有JVM都应该这样做(有关详细信息,请参阅here)。

你知道 - 其他任何事情都没有意义。某些类 A 可能会引用10个,其​​他20个类。你真的想加载 A 时加载所有这些类吗?那些参考A的所有10,20个类都引用了?!不知道你是否需要它们?!

答案 1 :(得分:0)

有两种重载方法可以加载类。

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

这里resolve是一个布尔标志,当它为true时,它也将解析所有引用的类。如果它是假的,它就不会加载引用的类。

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

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