我是从Java™I / O,第二版获得的
艾略特·鲁斯蒂·哈罗德(Elliotte Rusty Harold):-
将try / catch块包装在对System.out.println()的每次调用上会很不方便,Sun决定让PrintStream(和后来的PrintWriter)捕获并吃掉print()或println()方法中引发的任何异常。如果您确实想检查print()或println()方法内部的异常,则可以调用checkError():
公共布尔checkError()
如果在此打印流上发生异常,则checkError()方法返回TRue,否则返回false。它仅告诉您发生了错误。它不会告诉您发生了哪种错误。如果您需要更多有关错误的信息,则必须使用其他输出流或writer类。
我只是想测试此checkError方法的真实返回类型。
为此创建一些实际方案的任何线索... :-)
最佳答案
以下是checkError()
返回true
的两种情况:
场景1
打开文件的输出流到小型文件系统/设备;例如软盘?
创建一个PrintStream
循环以写入PrintStream。
最终,文件系统将填满,并且写入将失败。
场景2
打开到某些HTTP服务器的URL连接。
获取连接的OutputStream
创建一个PrintStream
将一些输出写入PrintStream。
在连接上调用getStatus(),或调用closeConnection
尝试编写更多输出。
现在写入将失败,因为HTTP连接不再处于将数据发送到远程服务器的正确状态。
从某种意义上说,您应该能够使它们给您带来错误,这些方案是实用的。但是它们并不完全现实。例如,您通常不会使用PrintStream将POST数据发送到HTTP服务器。但这是OutputStream API和PrintStream API之间差异的根源。 OutputStream / Writer API专为应用程序需要知道输出是否失败的用例而设计。 PrintStream / PrintWriter API专为“轻量级”用例而设计,例如将用户消息输出到处理失败的控制台,这很浪费程序员的精力。
关于java - System.out.println()不会引发异常,但是System.in.read()会引发异常,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1609675/