System.out可以设置还是不设置?

时间:2012-12-04 21:10:05

标签: java

  

可能重复:
  java: “final” System.out, System.in and System.err?

直接设置System.out

System.out = null; //gives error that it is final and that's understood

但看看这个:

System.setOut(null); //allows to set out ??

但如果outfinal,那又怎么可能?

3 个答案:

答案 0 :(得分:2)

它在非常低的水平上完成。在Java级别,您甚至无法将null分配给final变量。来自JDK 1.7的源代码:

/**
 * Reassigns the "standard" output stream.
 *
 * <p>First, if there is a security manager, its <code>checkPermission</code>
 * method is called with a <code>RuntimePermission("setIO")</code> permission
 *  to see if it's ok to reassign the "standard" output stream.
 *
 * ...
 */
public static void setOut(PrintStream out) {
    checkIO();
    setOut0(out); //native method
}

答案 1 :(得分:1)

在第一个实例中,静态变量System.out是最终的,因此您无法设置它。

在第二个实例中,您正在调用一个静态方法,该方法将标准输出设置为不同的流。

答案 2 :(得分:1)

简单的答案是,使用本机C编写的内容,特别是库类,不一定要遵循与您和我编写纯Java相同的规则。

编辑:经过进一步调查后,即使您和我可以更改final字段(前提是安全管理不对象)也是如此。见https://stackoverflow.com/a/3301720/367273