这个问题涉及到Java。有三种获取类型类的方法(请注意,代码只是演示片段的集合):
Class c1 = Class.forName("com.mypkg.MyClass"); //assumes initialize = true
// - OR -
Class c1 = Class.forName("com.mypkg.MyClass", true/false,
this.getClass().getClassLoader());
Class c2 = com.mypkg.MyClass.class;
// - OR -
import com.mypkg.MyClass;
Class c2 = MyClass.class;
MyClass mc = new MyClass();
Class c3 = mc.getClass();
我的问题是关于初始化的。对于方法1,我可以使用布尔参数控制是否初始化类。对于方法3,由于创建了一个对象,显然类已经被初始化(对吗?)。
但是对于方法2呢?如果调用.class并且类尚未初始化,会不会初始化该类?并且如何以编程方式检查类是否已经初始化?
总结答案:
调用.class不会初始化类,如果要检查类是否正在初始化,可以在类定义中使用静态块打印消息。
原始问题的原因:
根据Class.forName的javadoc,“调用forName(“X”)会导致名为X的类被初始化。”此外,有两种Class.forName方法,其中包括一种接受名为initialize的布尔参数。根据javadoc,“仅当initialize参数为true且尚未初始化时才初始化该类”。
.class
是否会引起类的初始化,就像Class.forName
一样。 - undefinedClass.forName
,它会提到"初始化"。类被初始化时,这可能指的是初始化static
变量和执行static
代码块。 - undefined