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

来源:百度知道 编辑:UC知道 时间:2024/06/15 20:26:25
请问什么叫“输入重定向”,为什么要输入重定向?java对声明为final的域重新赋值是不被允许的,如果setIn不修改System.in, 那修改的是什么呢?

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还是被改了。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class T3 {
public static void main(String[] args) throws IOException {
InputS