什么时候可以Field.set(Object obj, Object value)抛出ExceptionInInitia



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
    }
}

相关内容

  • 没有找到相关文章

最新更新