1

加载类时,使用 method forName(),执行类中的任何静态initializers。我可以防止这种情况吗?

try {
        Class.forName("MYClass");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我的课

class MyClass{

static String TEST="MYCLASS";
static SomeClass sm=new SomeClass();
}

我在文档中发现有一个 Class.forName() 的重载版本,即

public static Class<?> forName(String name,
                           boolean initialize,
                           ClassLoader loader)
                    throws ClassNotFoundException

什么是initialize参数?

4

2 回答 2

0

这就是 Java 创建对象的方式,所以不是。一种方法是在其他时间延迟加载实例。

这意味着您必须删除静态引用。

例如

public SomeClass getSomeClass() {
   if (sm == null) {
      return new SomeClass();
   }

   return sm;

}
于 2012-06-14T13:46:59.307 回答
0

如果您不想执行静态初始化,请尝试使用类文字而不是 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
    }
}
于 2012-06-14T13:50:29.693 回答