【发布时间】:2013-06-12 11:06:25
【问题描述】:
public final static InputStream in = null;
public final static PrintStream out = null;
public final static PrintStream err = null;
但众所周知,这些流默认连接到控制台并且已经打开。 System 类中还有一些方法 setIn()、setOut 和 setErr() 来重定向流。当它们被声明为 final 并设置为初始化值 null 时,这怎么可能?
我编译了以下代码,在调用 println() 时设置了一个断点,并使用 netbeans 进行了调试。我的目标是通过进入源代码来准确确定变量 System.in 何时初始化为标准输出。但是在调用 main 方法时,输出流 out 似乎已经初始化了。
public static void main(String[] args) {
System.out.println("foo");
}
【问题讨论】:
-
值得注意的是,
final变量仍然可以被操作,只是只能在编译时阻止操作,特别是通过阻止您使用赋值运算符 (=)。见this question。