時々、私は見る
try {
} catch(Throwable e) {
}
そして時折
try {
} catch(Exception e) {
}
違いはなんですか?
キャッチThrowableすることで、サブクラスのものが含まれますError。おそらく、ログに記録したいスレッドの非常に高い「すべてをキャッチ」レベルで、またはその他の方法で問題が発生する可能性のあるすべてのものを完全に処理する場合を除いて、通常はこれを行わないでください。フレームワークタイプのアプリケーション(アプリケーションサーバーやテストフレームワークなど)では、不明なコードを実行でき、そのコードで問題が発生した場合に可能な限り影響を受けないようにするのが一般的です。
ThrowableExceptionだけでなくのスーパークラスですError。Exception通常の場合、根本原因が失われないように、常にのサブクラスをキャッチする必要があります。
Javaコードを制御できない問題が発生する可能性がある特別な場合にのみ、Errorまたはをキャッチする必要がありますThrowable。
Throwableをキャッチして、ネイティブライブラリがロードされていないことを示すフラグを立てたことを覚えています。
ThrowableThread.stop()現在非推奨のメソッドからスレッドを停止するためにデフォルトでスローされるThreadDeathでさえ、実際にすべてをキャッチします。したがって、キャッチThrowableすることで、少なくともキャッチブロックを通過せずに、tryブロックを離れることは決してないことを確認できますが、OutOfMemoryErrorおよびInternalErrorまたはを処理する準備をする必要がありますStackOverflowError。
キャッチThrowableは、あらゆる種類のリクエストを外部コードに委任する外部サーバーループに最も役立ちますが、サービスを存続させるためにそれ自体が終了することはありません。
私は人々がThrowableを使用して、インフラストラクチャの障害/可用性の欠如が原因で発生する可能性のあるいくつかのエラーをキャッチするのを見てきました。