看一下这个例子:
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
System.out.println("hi there!");
System.out.close();
System.out.println("I'm silently swallowed :(");
System.out.flush(); // even flushing and closing again
System.out.close(); // doesn't throw an Exception
try {
FileOutputStream fos = new FileOutputStream(FileDescriptor.out);
fos.flush(); // same goes for this more direct approach
fos.close();
} catch (IOException e) {
e.printStackTrace(System.err);
}
}
}
为什么JVM不能告诉我,写入stdout失败了?我希望得到一个例外某处。
我怎么能发现这种情况?
答案 0 :(得分:4)
Official specification说明了一切。
与其他输出流不同,
PrintStream
永远不会抛出IOException
;相反,特殊情况只是设置了一个内部标志,可以通过checkError
方法进行测试。
如果你的问题是"为什么他们决定这样做?#34;那么我们所能做的就是做出有根据的猜测,但是这个网站上的意见是偏离主题的。