System.out声明为public static final PrintStream out。但是您可以致电System.setOut()重新分配它。??如果是这样怎么可能final?(System.in和适用于System.err)更重要的是,如果您可以对public static final字段进行突变,那么就可以为final您提供的保证(如果有)意味着什么?(我从未意识到,也没想到System.in/out/err表现为final变量)
3 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
Java使用一个本地方法来实现setIn(),setOut()和setErr()。
在我的JDK1.6.0_20上,setOut()如下所示:
public static void setOut(PrintStream out) {
checkIO();
setOut0(out);
}
...
private static native void setOut0(PrintStream out);
您仍然不能“正常”重新分配final变量,即使在这种情况下,也不能直接重新分配字段(即,您仍然无法编译“ System.out = myOut”)。本机方法允许执行某些您在常规Java中根本无法做到的事情,这解释了本机方法为何存在限制,例如要求对applet进行签名才能使用本机库。
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
继续亚当所说的,这是暗示:
public static void setOut(PrintStream out) {
checkIO();
setOut0(out);
}
setOut0定义为:
private static native void setOut0(PrintStream out);
添加回答
举报
0/150
提交
取消