基本的なJavaとさまざまな種類のThrowableについてさらに詳しく学習しようとしていますが、例外とエラーの違いを誰かに教えてもらえますか?
エラーをキャッチまたは処理しないでください(ごくまれなケースを除きます)。例外は、例外処理の基本です。 Javadoc はそれをうまく説明しています:
エラーはThrowableのサブクラスであり、合理的なアプリケーションがキャッチしようとしてはならない重大な問題を示します。そのようなエラーのほとんどは異常な状態です。
Error
のいくつかのサブクラスを見て、JavaDocコメントをいくつか取ってください。
AnnotationFormatError
-アノテーションパーサーがクラスファイルからアノテーションを読み取ろうとし、アノテーションの形式が正しくないと判断した場合にスローされます。AssertionError
-アサーションが失敗したことを示すためにスローされます。LinkageError
-LinkageErrorのサブクラスは、クラスが別のクラスに依存していることを示します。ただし、後者のクラスは、前者のクラスのコンパイル後に互換性のない変更が加えられています。VirtualMachineError
-Java仮想マシンが壊れているか、動作を継続するために必要なリソースが不足していることを示すためにスローされます。Throwable
には、本当に3つの重要なサブカテゴリがあります。
Error
-重大な問題が発生したため、ほとんどのアプリケーションは問題を処理しようとするのではなくクラッシュします。RuntimeException
)-NullPointerException
や不正な引数などのプログラミングエラーが非常に頻繁に発生します。アプリケーションは、このThrowable
カテゴリを処理または回復できます。あるいは、少なくともスレッドのrun()
メソッドでキャッチして、苦情をログに記録し、実行を継続できます。FileNotFoundException
やTimeoutException
...など、残りをキャッチして意味のあることを実行できることが期待されます。この Javaの例外階層を示すスライド by @ georgios-gousios は、Javaのエラーと例外の違いを簡潔に説明しています。
エラーは、ご存知のようにアプリケーションの終了を知らせる傾向があります。通常は回復できないため、VMを終了する必要があります。終了する前に、適切なメッセージを記録または表示する場合を除いて、それらをキャッチしないでください。
例:OutOfMemoryError-プログラムが実行できなくなるため、できることはあまりありません。
例外は多くの場合回復可能であり、回復できない場合でも、通常は試行された操作が失敗したことを意味しますが、プログラムは引き続き実行できます。
例:IllegalArgumentException-メソッド呼び出しに失敗するように無効なデータをメソッドに渡しましたが、将来の操作には影響しません。
これらは単純な例であり、例外だけに関する情報も豊富にあります。
日 最高に置く :
エラーはThrowableのサブクラスであり、合理的なアプリケーションがキャッチしようとしてはならない重大な問題を示します。
エラー -
Error
sはJava.lang.Error
型です。Error
sは実行時に発生します。コンパイラーには認識されません。Error
sは、主にアプリケーションが実行されている環境によって引き起こされます。Java.lang.StackOverflowError
、Java.lang.OutOfMemoryError
例外 -
Exception
sはJava.lang.Exception
型です。Exception
sには、チェック済みと未チェックの両方のタイプが含まれます。try-catch
ブロックを介して例外を処理することにより、例外から回復できます。Exception
sは、主にアプリケーション自体が原因です。SQLException
、IOException
ArrayIndexOutOfBoundException
、ClassCastException
、NullPointerException
さらに読む: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-Java/
Error
クラスの説明は非常に明確です。
Error
は、Throwable
のサブクラスであり、合理的なアプリケーションがキャッチしようとしてはならない重大な問題を示します。そのようなエラーのほとんどは異常な状態です。ThreadDeath
エラーは、「通常の」状態ですが、ほとんどのアプリケーションがキャッチしようとしないため、Error
のサブクラスでもあります。メソッドは、メソッドの実行中にスローされるがキャッチされない
Error
のサブクラスをthrows節で宣言する必要はありません。これらのエラーは決して発生しない異常な状態であるためです。
Java独自の クラスError
のドキュメント から引用。
要するに、Error
sをキャッチするべきではありませんが、そうする正当な理由がある場合を除きます。 (たとえば、サーブレットのメモリ不足などが発生した場合にWebサーバーの実装がクラッシュするのを防ぐため)
一方、Exception
は、他の現代言語と同様に、通常の例外です。詳細な説明は、Java APIドキュメントまたはオンラインまたはオフラインのリソースにあります。
クラスJava.lang.Exception
とJava.lang.Error
にはいくつかの類似点と相違点があります。
類似性:
まず、両方のクラスがJava.lang.Throwable
を拡張し、その結果、次のようなエラーを処理するときに使用される一般的なメソッドの多くを継承します:getMessage
、getStackTrace
、printStackTrace
など。
第二に、Java.lang.Throwable
のサブクラスであるため、両方とも次のプロパティを継承します。
Throwable自体とそのサブクラス(Java.lang.Error
を含む)は、throws
キーワードを使用してメソッド例外リストで宣言できます。このような宣言は、Java.lang.Exception
およびサブクラス、Java.lang.Throwable
、Java.lang.Error
およびJava.lang.RuntimeException
およびそれらのサブクラスに対してのみ必要であり、オプションです。
catch
句で使用できるのは、Java.lang.Throwable
およびサブクラスのみです。
キーワードthrow
で使用できるのは、Java.lang.Throwable
およびサブクラスのみです。
このプロパティの結論は、Java.lang.Error
とJava.lang.Exception
の両方がメソッドヘッダーで宣言でき、catch
句で使用でき、キーワードthrow
で使用できるということです。
違い:
まず-概念的な違い:Java.lang.Error
はJVMによってスローされ、深刻な問題を示し、キャッチされるのではなくプログラムの実行を停止するように設計されています(ただし、他のJava.lang.Throwable
後継者については可能です)。
javadoc からの説明Java.lang.Error
に関する説明:
...合理的なアプリケーションがキャッチしようとしてはならない重大な問題を示します。
反対のJava.lang.Exception
は、予想されるエラーを表すように設計されており、プログラムの実行を終了せずにプログラマーが処理できます。
javadoc からの説明Java.lang.Exception
に関する説明:
...合理的なアプリケーションがキャッチしたい条件を示します。
Java.lang.Error
とJava.lang.Exception
の2番目の違い。 Java.lang.Error
またはそのサブクラスをスローする結果コードは、メソッドヘッダーでこのエラーを宣言する必要がありません。メソッドヘッダーでJava.lang.Exception
が必要な宣言をスローしている間。IMOエラーは、アプリケーションの失敗を引き起こす可能性があるため、処理しないでください。例外とは、予測不能な結果を引き起こす可能性があるものの、回復できるものです。
例:
プログラムがメモリ不足になると、アプリケーションが続行できないためエラーになります。ただし、プログラムが誤った入力タイプを受け入れる場合、プログラムはそれを処理し、正しい入力タイプを受信するようにリダイレクトできるため、例外です。
エラーの主な原因は、アプリケーションが実行されている環境です。たとえば、JVMがメモリ不足になるとOutOfMemoryErrorが発生し、スタックがオーバーフローするとStackOverflowErrorが発生します。
例外は主にアプリケーション自体が原因です。たとえば、アプリケーションがnullオブジェクトにアクセスしようとするとNullPointerExceptionが発生し、アプリケーションが互換性のないクラス型をキャストしようとするとClassCastExceptionが発生します。
ソース: Javaでのエラーと例外の違い
エラーと例外が表すJava APIのかなり良い要約を以下に示します。
エラーはThrowableのサブクラスであり、合理的なアプリケーションがキャッチしようとしてはならない重大な問題を示します。そのようなエラーのほとんどは異常な状態です。 ThreadDeathエラーは、「通常の」状態ですが、ほとんどのアプリケーションがキャッチしようとしないため、Errorのサブクラスでもあります。
メソッドは、メソッドの実行中にスローされるがキャッチされない可能性のあるErrorのサブクラスをthrows句で宣言する必要はありません。これらのエラーは決して発生しない異常な状態だからです。
OTOH、例外の場合、Java APIのコメント:
クラスExceptionとそのサブクラスはThrowableの形式であり、合理的なアプリケーションがキャッチしたい条件を示します。