gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:18:24 24 4
gpt4 key购买 nike

javadoc对于 Field 的设置方法类明确指出,如果此方法引发的初始化失败,则可能会发生 ExceptionInInitializerError。 我想知道类在被引用或我们使用 Class.forName("binary name",true,ClassLoader) 时会被延迟初始化。如果类的初始化没有失败,那么类变量已经根据分配的值进行了初始化声明或在静态构造函数中。一旦字段被初始化,当字段的类设置方法调用时,它是否可以显式抛出 ExceptionInInitializerError??

最佳答案

Field#set(Object, Object) 可用于设置static 字段。如果您尝试设置 未初始化类的字段,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
}
}

关于java - Field.set(Object obj, Object value) 什么时候可以抛出 ExceptionInInitializerError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25121294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com