【发布时间】:2013-10-22 16:59:14
【问题描述】:
我遇到了一位朋友发给我的 sn-p。它有一个非常奇怪的行为。我尝试用谷歌搜索代码,看看我是否在互联网上找到了一些东西,但没有运气。我无法联系到我的朋友,所以我很好奇它在做什么。
public class Test {
public static void main(String[] args) throws MalformedURLException {
System.out.println(Boolean.TRUE); //This prints false
}
static {
try {
Field value = Boolean.class.getDeclaredField("value");
value.setAccessible(true);
value.set(Boolean.TRUE, value.get(Boolean.FALSE));
} catch (Exception e) {
throw new AssertionError(e);
}
}
}
我认为,就像声明为静态的那段代码一样,它将首先运行 main 方法,并且在该静态代码内部正在更改所有 Boolean 实例的值(?)。我不知道,我需要专家意见来确认这一点。
【问题讨论】:
-
static部分是一个静态初始化块,在类首次加载时执行。此块使用(讨厌的)反射将静态字段TRUE的值更改为等于false。查看initializing fields了解更多详情