gpt4 book ai didi

java - 为什么在使用反射时没有 illegalAccessException

转载 作者:行者123 更新时间:2023-11-30 08:30:02 26 4
gpt4 key购买 nike

我正在尝试学习反射(reflection),我在回答这个问题时,为什么它没有异常??

public class FieldExceptionTest {
private boolean b = true;

public static void main(String[] args) throws Exception{
FieldExceptionTest ft = new FieldExceptionTest();
Class<?> c = ft.getClass();
Field f = c.getDeclaredField("b");
// f.setAccessible(true); //if i don't write this line, it also can run.
f.setBoolean(ft, Boolean.FALSE);
System.out.println(ft.b);
}
}

为什么它没有抛出 IllegalAccessException?通过阅读其他书籍,我知道如果尝试获取或设置私有(private)或其他不可访问字段的值或设置最终字段的值,则可能会抛出 IllegalAccessException。但在这里,它没有,为什么?

最佳答案

当访问“可访问对象”(方法、构造函数、字段等)时,会发生针对反射的访问检查。在这种情况下,您的字段是从一个允许访问它的类写入的,所以它可以工作。

(顺便说一句:这与 Java 7 方法句柄明显不同,在 Java 7 中,访问检查发生在创建方法句柄时,而不是在使用时。您可以使用方法句柄来授予对您拥有的方法的额外访问权限访问,通过将其传递给通常没有此类访问权限的其他代码。)

关于java - 为什么在使用反射时没有 illegalAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18927965/

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