也许这个问题有点“奇怪”。但我很想知道为什么PrintWriter和PrintStream都不会自动检查运行时异常,它们提供了一个 checkError() 方法。
提前感谢大家。
对于经常写入标准输出或错误的 PrintStream,这些流可能已被关闭或丢弃,但您不希望程序因此而意外失败。
PrintWriter 在很多方面都是 PrintStream 的 Writer 版本,尽管我不确定重复 PrintStream 的错误是否是个好主意。;)
PrintWriter 不报告 IOException 的事实使其成为将文本写入您经常需要知道连接失败的 Socket 的糟糕选择。
我认为这主要是因为 System.err 是一个 PrintStream。
当您在 catch 块中处理异常时,调用 e.printStackTrace() 很常见,它会写入 System.err。如果该调用引发异常,您将丢失原始异常并从您的代码中获取 PrintStream 错误。然后你需要在你的 catch 块中额外的 try/catch 来防止这个问题,这会造成很大的混乱。
请注意,JDK 1.7 解决了从 catch 块中抛出异常的问题,并允许您访问这两个异常。