加载类和实例化它之间的区别

Ani*_*kur 10 java classloader

有人可以解释类加载和实例化类之间的区别.当我们使用Static变量加载一个类时,它是否也在Class加载的同时实例化?毕竟静态代码是类的一部分而不是它的个别实例.如果有人提供了一个例子来帮助我更好地理解这一点,那将会很有帮助.

Sur*_*tta 10

这是一个很好的解释(有一个例子和观察)

在JVM中加载和初始化类时 - Java

在Java中加载Class时

类加载由Java中的ClassLoaders完成,只要另一个类引用它或者延迟加载类直到需要进行类初始化,就可以实现类加载类.如果Class在实际使用之前加载,它可以在初始化之前就位于内部.我相信这可能会有所不同,从JVM到JVM.虽然JLS保证在需要静态初始化时会加载一个类.

在Java中初始化类时

在Java中初始化类之后在类加载之后,会发生类的初始化,这意味着初始化类的所有静态成员.在以下情况下,Java在Java中初始化:

1)使用new()关键字或使用class.forName()的反射创建类的实例,这可能会在Java中抛出ClassNotFoundException.

2)调用Class的静态方法.

3)分配类的静态字段.

4)使用类的静态字段,它不是常量变量.

5)如果Class是顶级类,则执行词法嵌套在类中的断言语句.

希望有所帮助.


JB *_*zet 6

Integer.toString(123);
Run Code Online (Sandbox Code Playgroud)

对于上面的静态方法调用,必须加载Integer类.

Integer i = new Integer(123);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我创建了一个Integer类的实例(对象)(显然也必须加载它才能使其工作).

某些类不是要实例化的(例如,Math类,它只有静态方法).