我无法理解我们如何通过调用 System.setOut(PrintStream)来重定向/重置 System.out 当 System.out 被宣布为最终? 时
setOut(PrintStream out) 应该重新分配 System.out 参数的值,鉴于 System.out 是最终版本,这应该是不可能的。
关于如何做的任何解释?
答案 0 :(得分:3)
输入/输出/错误字段无需更改。
他们可能只是环绕另一个流。这些包装的流具有默认行为 - 当调用这些setter方法时,您只需替换该“interal”流。
喜欢:System.out使用“internal.out” - 并且使用setter可以将internal.out更改为user.out(例如,仅将这些名称组成)。
答案 1 :(得分:1)
怎么可能?
setOut
实现为
public static void setOut(PrintStream out) {
checkIO();
setOut0(out);
}
和setOut0
是在本机系统(JVM)中实现的方法,因此能够更改系统的最终字段:
private static native void setOut0(PrintStream out);
注意:也可以通过反射更改最终字段 - 例如,更改不可变字符串文字的值