猿问

java:“最终” System.out,System.in和System.err?

System.out声明为public static final PrintStream out。


但是您可以致电System.setOut()重新分配它。


??如果是这样怎么可能final?


(System.in和适用于System.err)


更重要的是,如果您可以对public static final字段进行突变,那么就可以为final您提供的保证(如果有)意味着什么?(我从未意识到,也没想到System.in/out/err表现为final变量)


守着星空守着你
浏览 435回答 3
3回答

繁星淼淼

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进行签名才能使用本机库。

肥皂起泡泡

继续亚当所说的,这是暗示:public static void setOut(PrintStream out) {    checkIO();    setOut0(out);}setOut0定义为:private static native void setOut0(PrintStream out);
随时随地看视频慕课网APP

相关分类

Java
我要回答