相关疑难解决方法(0)

".class"获取类的方式 - 是否初始化类?

问题是关于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();
Run Code Online (Sandbox Code Playgroud)

我的问题是关于初始化.对于方法1,我可以使用boolean参数控制是否初始化类.对于方法3,由于创建了一个对象,显然该类已初始化(对吗?).

但方法2怎么样?.class如果尚未初始化,是否调用初始化类?
如何能一个编程方式检查类是否已经被初始化或没有?

总结答案:

请参阅已接受的解决方案及其评论以获得完整答案 这只是一个总结.

.class如果尚未初始化,则调用不会初始化该类.您可以通过在打印消息的类定义中使用静态块来检查是否正在初始化类.

原始问题的原因:

根据javadoc的说法Class.forName,"对forName("X")的调用导致名为X的类被初始化." .还有两种Class.forName方法,包括一种接受名为initialize的布尔参数.根据javadoc,"仅当initialize参数为true且之前尚未初始化时才初始化类."

java class

1
推荐指数
1
解决办法
275
查看次数

标签 统计

class ×1

java ×1