我有一段简单的代码,它的工作方式与我期望的方式不同:
try (OutputStream ostr = new BufferedOutputStream(System.out)) {
ostr.write("lol".getBytes());
}
System.out.println("hmmm");
结果只是
lol
已打印,但不是hmm
。
我做错了什么?如果由于hmm
关闭ostr
而未打印System.out
,我是否正确?我知道这是一个非常合理的例子,但我仍然希望得到答案。
答案 0 :(得分:2)
try结构最后关闭ostr
。结束时传播到System.out
。随后调用System.out.println("hmmm");
会使System.out
遇到麻烦 - 但不会抛出异常。 (这是PrintStream
处理错误的奇怪方式。)试试这个:
System.out.close();
System.out.println("hmmm");
System.err.println("System.out in trouble: " + System.out.checkError());
打印(通过仍然完整的System.err流):
System.out in trouble: true