为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着星空守着你 2019-11-18 10:48:01
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进行签名才能使用本机库。


查看完整回答
反对 回复 2019-11-18
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

继续亚当所说的,这是暗示:


public static void setOut(PrintStream out) {

    checkIO();

    setOut0(out);

}

setOut0定义为:


private static native void setOut0(PrintStream out);


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 406 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信