使用方法forName()
加载类时,将执行类中的任何静态initializers
。
我可以阻止这个吗?
try {
Class.forName("MYClass");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MyClass的
class MyClass{
static String TEST="MYCLASS";
static SomeClass sm=new SomeClass();
}
我在doc中发现有一个Class.forName()的重载版本,即
public static Class<?> forName(String name,
boolean initialize,
ClassLoader loader)
throws ClassNotFoundException
什么是initialize
参数?
答案 0 :(得分:0)
这就是Java创建对象的方式,所以没有。一种方法是在其他时间延迟加载实例。
这意味着您必须删除静态引用。
e.g。
public SomeClass getSomeClass() {
if (sm == null) {
return new SomeClass();
}
return sm;
}
答案 1 :(得分:0)
如果您不想执行静态初始化,请尝试使用class literal而不是Class.forName
class A1{
static{
System.out.println("static block from A1");
}
}
class B1{
public static void main(String[] args) throws ClassNotFoundException {
// Class.forName("A1");//this will invoke static initialization
Class c=A1.class;//this will not invoke static initialization
}
}