5

重複の可能性:
PrintWriterとPrintStreamがIOExceptionをスローすることはありません

多分質問は少し「奇妙」です。しかし、 PrintWriterPrintStreamの両方が実行時例外を自動的にチェックせず、checkError()メソッドを提供する理由を知りたいです。

よろしくお願いします。

4

2 に答える 2

4

std outまたはerrに書き込むことが多いPrintStreamの場合、これらのストリームは閉じられているか破棄されている可能性がありますが、結果としてプログラムが予期せず失敗することは望ましくありません。

PrintWriterは多くの点でPrintStreamのWriterバージョンですが、PrintStreamの間違いを繰り返すのが良い考えであったかどうかはわかりません。;)

PrintWriterがIOExceptionを報告しないという事実は、接続が失敗したことを知る必要があるソケットにテキストを書き込むための不適切な選択になります。

于 2012-09-14T20:50:12.433 に答える
0

主に System.err が PrintStream であるためだと思います。

catch ブロックで例外を処理している場合、e.printStackTrace() を呼び出すのが一般的で、System.err に書き込みます。その呼び出しで例外がスローされた場合、元の例外が失われ、代わりにコードから PrintStream エラーがスローされます。その場合、その問題を防ぐために catch ブロック内に追加の try/catch が必要になり、大きな混乱が生じます。

JDK 1.7 は、catch ブロックから例外をスローする問題に対処し、両方の例外にアクセスできるようにすることに注意してください。

于 2012-09-14T21:05:25.547 に答える