時々見ます
try {
} catch(Throwable e) {
}
時には
try {
} catch(Exception e) {
}
違いはなんですか
Throwable
をキャッチすると、Error
をサブクラス化するものが含まれます。おそらく、ログを記録したい、または問題が発生する可能性のあるすべてを完全に処理したいスレッドの非常に高い「すべてをキャッチ」レベルを除いて、通常はこれを行うべきではありません。フレームワークタイプのアプリケーション(アプリケーションサーバーやテストフレームワークなど)でより一般的であり、不明なコードを実行でき、anythingの影響を受けないようにする必要があります。可能な限り。
Throwable
は、Exception
とError
のスーパークラスです。通常は、Exception
のサブクラスを常にキャッチして、根本原因が失われないようにする必要があります。
Javaコードの制御下にない問題が発生する可能性がある場合にのみ、Error
またはThrowable
をキャッチする必要があります。
ネイティブライブラリがロードされていないことを示すためにThrowableをキャッチしたことを覚えています。
Thowable
は、現在廃止されているThread.stop()
メソッドからスレッドを停止するためにデフォルトでスローされるThreadDeathでさえ、本当にすべてをキャッチします。したがって、Throwable
をキャッチすることで、少なくともcatchブロックを経由せずにtryブロックを終了することはありませんが、OutOfMemoryError
とInternalError
またはStackOverflowError
も処理できるように準備する必要があります。
Throwable
をキャッチすることは、あらゆる種類の要求を外部コードに委任するが、それ自体がサービスを維持するために終了しない可能性がある外部サーバーループに最も役立ちます。