类加载和初始化

时间:2017-08-09 18:23:19

标签: java classloader

我试图了解类加载和初始化时的确切场景。我看到下面的两篇文章给出了不同的答案

javarevisited - 当使用 new ()关键字或使用类反射创建类的实例时,Java中的类已初始化。 forName(),它可能在Java中抛出ClassNotFoundException。

Java world- 那么什么时候加载?恰好有两种情况:执行新字节码时(例如,FooClass f = new FooClass();)以及当字节码对类进行静态引用时(例如,System.out) )。

因此,当我使用new关键字创建类的实例时,是否已加载或初始化类?

关于因引用变量而导致加载的另一件事:

javarevisited - 类加载由Java中的类加载器完成,只要另一个类引用它或者延迟加载类,就可以实现为急切加载类。需要进行类初始化

这里引用的作者是什么意思?他是否暗示如果A类具有B类的引用变量,那么当在A中遇到它的引用时,B类会被加载。

但是下面的作者说没有加载类NotUsed但我看到ClassInitializationTest类有引用

javarevisited -

/ **   *此类程序中未使用的Java类,因此未由JVM加载   * /

class NotUsed {
 static { System.out.println("NotUsed Class is initialized "); }

}

1 个答案:

答案 0 :(得分:-1)

myClass a = new myClass();

正如我所教导的那样,第一部分是初始化,第二部分是“=”之后是加载。

您可以初始化一个类:

myClass a;

然后在代码中加载它:

a = new myClass();

与变量初始化相同。