PrintWriter 和 PrintStream 从不抛出 IOExceptions

2022-09-01 23:42:38

几天前,我意识到PrintWriter(以及PrintStream)在编写,刷新或关闭时从不抛出IOException

相反,它在发生错误时设置内部标志 ()。
不可能获得确切的异常,但前提是存在某些异常(checkError())。trouble=true

我的问题是:为什么一个人想要有这样的行为?这不是糟糕的API设计吗?


答案 1

我认为,由于 和 是 的实例,因此提供了一些更宽松的错误处理。正如其他海报所提到的,这可能是为了给那些在1995年左右从C/C++过渡的人铺平道路。添加读取器/写入器 API 时,将创建以并行现有 .System.outSystem.errPrintStreamPrintWriterPrintStream

非常需要此行为的一个应用程序是日志记录。日志记录是较大应用程序的辅助功能。通常,如果日志记录失败,则不希望整个应用程序失败。因此,至少忽略异常是有意义的。System.err


答案 2

我想知道它是否因为IOExceptions被检查,这将需要你在每个System.out周围放置一个尝试捕获块。叫。

更新:或抛出您的方法签名。

这很快就会变得烦人。