Fieldclass的set方法的javadoc明确指出,如果由该方法引起的初始化失败,则可能发生ExceptionInInitializerError。我想知道,类得到惰性初始化时,他们被引用或当我们使用类。forName("二进制名称",true,ClassLoader) .如果类的初始化没有失败,则类变量已根据声明中或静态构造函数中分配的值初始化。一旦一个字段被初始化,它可以显式抛出ExceptionInInitializerError当调用字段的类集方法??
Field#set(Object, Object)
可设置static
字段。如果您尝试set
初始化类的字段,JVM将首先尝试初始化该类。如果发生故障,那么set
将抛出一个ExceptionInInitializerError
。请看下面的例子:
public class Example {
public static void main(String[] args) throws Exception {
Field field = Fail.class.getDeclaredField("number");
field.set(null, 42); // Fail class isn't initialized at this point
}
}
class Fail {
static int number;
static {
boolean val = true;
if (val)
throw new RuntimeException(); // causes initialization to end with an exception
}
}