繁体   English   中英

System.out.println()不会引发异常,但是System.in.read()会引发异常,为什么?

[英]System.out.println() don't throws Exception, but System.in.read() throws Exception, Why?

我是从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

  1. 打开文件输出流到小型文件系统/设备; 例如软盘?
  2. 创建一个PrintStream
  3. 循环以写入PrintStream。

最终,文件系统将填满,并且写入将失败。

场景2

  1. 打开到某些HTTP服务器的URL连接。
  2. 获取连接的OutputStream
  3. 创建一个PrintStream
  4. 将一些输出写入PrintStream。
  5. 在连接上调用getStatus(),或调用closeConnection
  6. 尝试编写更多输出。

现在写入将失败,因为HTTP连接不再处于将数据发送到远程服务器的正确状态。

从您应该能够使它们给您带来错误的意义上说,这些方案是实用的。 但是它们并不完全现实。 例如,您通常不会使用PrintStream将POST数据发送到HTTP服务器。 但这是OutputStream API和PrintStream API之间差异的根源。 OutputStream / Writer API专为应用程序需要知道输出是否失败的用例而设计。 PrintStream / PrintWriter API专为“轻量级”用例而设计,例如将用户消息输出到处理失败的控制台,这很浪费程序员的精力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM