我想了解一个类加载并初始化时的确切场景。我看到下面的两篇文章给出不同的答案类加载和初始化
javarevisited - A类类是用在Java中创建whenan实例的初始化无论新()关键字或使用反射使用Class.forName(),这可能抛出Java中的ClassNotFoundException。
Java world-那么,什么时候分类加载?有两种情况:执行新的字节码时(例如,FooClass f = 新的 FooClass();)以及字节码对类(例如System.out)进行静态引用时的情况。
所以当我使用new关键字创建一个类的实例是类加载或初始化?
另一件事要问关于装载由于引用变量:
javarevisited - 类加载是由类加载器中的Java可以实现尽快急切地加载类为其他类引用完成,或延迟加载类,直到需要类的初始化发生
是什么笔者通过参考这里是什么意思?他是否暗示如果A类具有B类的引用变量,那么B类在其引用在A中遇到时会被加载?
但笔者下面说类NOTUSED不加载,但我看到有ClassInitializationTest类的参考
/** * 这是不是在这个程序中使用的Java类,因此不是由JVM */
class NotUsed {
static { System.out.println("NotUsed Class is initialized "); }
}
加载3210
通过阅读文章,javaworld文章更加简单化,并提供了高层次的概述,而javarevisited文章更多地涉及细节,因此它们不完全相互矛盾,只是谈论不同的事情。至于你的参考问题,是的,这就是它的意思。 – Oleg