2011-06-14 5 views

答えて

2

Throwableが検出されます。しかし、Errorというサブクラスは、ユーザアプリケーションコードによって捕捉されることを意図していません。彼らはまだ捕まえることができますが、いくつかのエラーはアプリケーションを悪い状態にしておくことさえあります(例えばOutOfMemoryError)。

+0

うーん、それについてはわからない。 「ユーザーアプリケーションコード」に依存します。リモートロガーサービスでディスクが不足している場合はどうしたらよいでしょうか?おそらく、古いログファイルを削除して再試行していくらかのスペースを空けることができるでしょうか? – Bohemian

+0

@Bohemian:IOExceptionとなるでしょう... –

+0

@Bohemian私はJava言語仕様http://java.sun.com/docs/books/jls/second_edition/html/exceptions.doc.html 'Errorクラスとそのサブクラスは、通常のプログラムが通常復旧することが期待されない例外です。あなたがそれらをキャッチしたい場合はありません。具体的な例では、あなたはどんなエラーを参照していますか? –

0

catchブロックは、宣言されたThrowable型のサブタイプを捕捉します。たとえば、catch (Exception ex) {}は、RuntimeException(未チェック)でも子であるため、tryブロックでスローされた例外を処理します。

例外のサブクラスではないため、エラーのインスタンスをキャッチしないことに注意してください。あなたが本当にキャッチオールしたい場合は、catch (Throwable th)のようなものを使用することができます。これはお勧めできません。なぜなら、エラーは通常、アプリケーションがそれ自身で簡単に回復できない問題を示しているからです。

0

チェック/チェックされていない例外については、ほとんど知られていません。のコンパイル時には、という区別があります。

いくつかの醜いトリックで、スローされると宣言されていない場所にチェック例外をスローすると、チェックされていない例外と同様に処理されます(つまり、最も近い一致キャッチブロックに到達するために必要に応じてスタックフレーム)。そして、はい、そのようなトリックが存在します。

デフォルトではThread default uncaught exception handler(またはper-thread uncaught exception handler)の平均を処理する場合は、「正常」をキャッチすることによって処理されないチェック済みおよび未チェックの例外を処理します。

関連する問題