java.lang.System 的in是final的,为什么要有public static void setIn(InputStream in)方法?

来源:互联网 发布:新疆七五事件真相知乎 编辑:程序博客网 时间:2024/06/06 09:43

         setIn并不是修改System.in,只是将输入重定向了。

 

输入重定向baidu一下就知道了。

 

          简单的说,如果你将输入重定向到一个文件,你用System.in读到的就是文件的内容,而不是你在console里输入的内容。

 

setIn也许真的修改了System.in,但是setIn里是通过一个native方法来做的,很可能是用c实现的,

 

绕过了java语法的限制(但是至少你看不到这个修改它的java语句)

 

          这个可能对你有帮助:java 1.0里,System.in的确不是final的

 

http://docs.rinet.ru/jdk1.0/api/java.lang.System.html#10726

 

你可以直接给它赋值来重定向。看起来这不符合java之道,

 

 

所以java 1.1将它改为final,同时加入了setIn方法让你仍然可以做同样的事。

 

http://jerry.c-lab.de/java/JDK-1.1/api/java.lang.System.html#in

 

 

补充:看来System.in还是被改了。

 

原创粉丝点击