我试图了解类加载和初始化时的确切场景。我看到下面的两篇文章给出了不同的答案
javarevisited - 当使用 new ()关键字或使用类反射创建类的实例时,Java中的类已初始化。 forName(),它可能在Java中抛出ClassNotFoundException。
Java world- 那么什么时候加载?恰好有两种情况:执行新字节码时(例如,FooClass f = new FooClass();)以及当字节码对类进行静态引用时(例如,System.out) )。
因此,当我使用new关键字创建类的实例时,是否已加载或初始化类?
关于因引用变量而导致加载的另一件事:
javarevisited - 类加载由Java中的类加载器完成,只要另一个类引用它或者延迟加载类,就可以实现为急切加载类。需要进行类初始化
这里引用的作者是什么意思?他是否暗示如果A类具有B类的引用变量,那么当在A中遇到它的引用时,B类会被加载。
但是下面的作者说没有加载类NotUsed但我看到ClassInitializationTest类有引用
/ ** *此类程序中未使用的Java类,因此未由JVM加载 * /
class NotUsed {
static { System.out.println("NotUsed Class is initialized "); }
}
答案 0 :(得分:-1)
myClass a = new myClass();
正如我所教导的那样,第一部分是初始化,第二部分是“=”之后是加载。
您可以初始化一个类:
myClass a;
然后在代码中加载它:
a = new myClass();
与变量初始化相同。