391

時々、私は見る

try {

} catch(Throwable e) {

}

そして時折

try {

} catch(Exception e) {

}

違いはなんですか?

4

5 に答える 5

304

キャッチThrowableすることで、サブクラスのものが含まれますError。おそらく、ログに記録したいスレッドの非常に高い「すべてをキャッチ」レベルで、またはその他の方法で問題が発生する可能性のあるすべてのものを完全に処理する場合を除いて、通常はこれを行わないでください。フレームワークタイプのアプリケーション(アプリケーションサーバーやテストフレームワークなど)では、不明なコードを実行でき、そのコードで問題が発生した場合に可能な限り影響を受けないようにするのが一般的です。

于 2010-02-16T15:50:45.720 に答える
233

最初のものはThrowableExceptionとを含むError)のすべてのサブクラスをキャッチし、2番目のものは。のすべてのサブクラスをキャッチしExceptionます。

Errorプログラムで回復不可能であり、ロギングの目的(再度通過する)を除いて、通常はキャッチされません。Exceptionプログラムで回復可能です。そのサブクラスRuntimeExceptionはプログラミングエラーを示しており、通常は同様にキャッチされません。

于 2010-02-16T15:52:12.587 に答える
37

ThrowableExceptionだけでなくのスーパークラスですErrorException通常の場合、根本原因が失われないように、常にのサブクラスをキャッチする必要があります。

Javaコードを制御できない問題が発生する可能性がある特別な場合にのみ、Errorまたはをキャッチする必要がありますThrowable

Throwableをキャッチして、ネイティブライブラリがロードされていないことを示すフラグを立てたことを覚えています。

于 2014-08-05T06:24:52.127 に答える
34

ThrowableThread.stop()現在非推奨のメソッドからスレッドを停止するためにデフォルトでスローされるThreadDeathでさえ、実際にすべてをキャッチします。したがって、キャッチThrowableすることで、少なくともキャッチブロックを通過せずに、tryブロックを離れることは決してないことを確認できますが、OutOfMemoryErrorおよびInternalErrorまたはを処理する準備をする必要がありますStackOverflowError

キャッチThrowableは、あらゆる種類のリクエストを外部コードに委任する外部サーバーループに最も役立ちますが、サービスを存続させるためにそれ自体が終了することはありません。

于 2010-02-16T15:56:52.560 に答える
2

私は人々がThrowableを使用して、インフラストラクチャの障害/可用性の欠如が原因で発生する可能性のあるいくつかのエラーをキャッチするのを見てきました。

于 2019-11-07T21:47:51.270 に答える