回答:
エラーをキャッチまたは処理しないでください(まれなケースを除きます)。例外は、例外処理の基本です。Javadocはそれをうまく説明します:
Errorは、Throwableのサブクラスであり、妥当なアプリケーションがキャッチしようとしてはならない重大な問題を示します。このようなエラーのほとんどは異常な状態です。
Error
JavaDocコメントの一部を取りながら、のサブクラスのいくつかを見てください。
AnnotationFormatError
-アノテーションパーサーがクラスファイルからアノテーションを読み取ろうとして、アノテーションの形式が正しくないと判断した場合にスローされます。AssertionError
-アサーションが失敗したことを示すためにスローされます。LinkageError
-LinkageErrorのサブクラスは、クラスが別のクラスに依存していることを示します。ただし、前者のクラスのコンパイル後、後者のクラスは互換性がなくなりました。VirtualMachineError
-Java仮想マシンが故障しているか、Java仮想マシンが動作を継続するために必要なリソースを使い果たしたことを示すためにスローされます。 には、Throwable
次の3つの重要なサブカテゴリがあります。
Error
-深刻な問題が発生したため、ほとんどのアプリケーションは問題を処理するのではなくクラッシュするはずです。RuntimeException
)- NullPointerException
または、不正な引数などのプログラミングエラー。アプリケーションはこのThrowable
カテゴリを処理または回復できる場合があります-または、少なくともスレッドのrun()
メソッドでそれをキャッチし、苦情をログに記録して、実行を継続できます。FileNotFoundException
とTimeoutException
...@ georgios-gousiosによるJavaの例外階層を示すこのスライドは、Javaのエラーと例外の違いを簡潔に説明しています。
エラーは、ご存じのとおり、アプリケーションの終了を知らせる傾向があります。これは通常、復旧できず、VMを終了させるはずです。終了する前に、おそらくログまたは表示と適切なメッセージを除いて、それらをキャッチするべきではありません。
例:OutOfMemoryError-プログラムが実行できなくなるため、できることは多くありません。
例外は多くの場合回復可能であり、回復できない場合でも、通常は試行された操作が失敗したことを意味しますが、プログラムは引き続き実行できます。
例:IllegalArgumentException-メソッドに無効なデータを渡したため、メソッドの呼び出しは失敗しましたが、今後の操作には影響しません。
これらは単純な例であり、例外のみに関する情報も豊富にあります。
エラー -
Error
Javaのはタイプjava.lang.Error
です。Error
実行時に発生します。それらはコンパイラーには知られていません。 Error
sは主に、アプリケーションが実行されている環境が原因です。 java.lang.StackOverflowError
、java.lang.OutOfMemoryError
例外 -
Exception
Javaのはタイプ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は、Throwableのサブクラスであり、妥当なアプリケーションがキャッチしようとしてはならない重大な問題を示します。
Error
クラスの説明は非常に明確です。
Error
サブクラスであるThrowable
ことが合理的なアプリケーションは、キャッチすべきではないという重大な問題を示します。このようなエラーのほとんどは異常な状態です。ThreadDeath
エラーは、「通常」の状態が、またのサブクラスでError
、ほとんどのアプリケーションは、それをキャッチしようとするべきではありませんので。
Error
これらのエラーは発生してはならない異常な状態であるため、メソッドのthrows句でメソッドの実行中にスローされてもキャッチされないサブクラスをメソッドが宣言する必要はありません 。
クラスに関するError
Java独自のドキュメントから引用。
つまり、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
、オプションです。
句java.lang.Throwable
で使用できるのはサブクラスのみcatch
です。
java.lang.Throwable
およびサブクラスのみがキーワード-で使用できますthrow
。
このプロパティからの結論は両方に従ってjava.lang.Error
おりjava.lang.Exception
、メソッドヘッダーで宣言でき、catch
句で使用でき、keywordで使用できます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
最初に、コンパイル時の例外チェックでチェックされていない例外と見なされました。結果として、スローするコードjava.lang.Error
またはそのサブクラスは、メソッドヘッダーでこのエラーを宣言する必要がありません。java.lang.Exception
メソッドヘッダーで必要な宣言をスローしています。エラーの主な原因は、アプリケーションが実行されている環境です。たとえば、JVMのメモリが不足するとOutOfMemoryErrorが発生し、スタックがオーバーフローするとStackOverflowErrorが発生します。
例外は主にアプリケーション自体が原因です。たとえば、アプリケーションがnullオブジェクトにアクセスしようとするとNullPointerExceptionが発生し、アプリケーションが互換性のないクラス型をキャストしようとするとClassCastExceptionが発生します。
エラーと例外が何を表すかについて、Java APIからのかなり良い要約を以下に示します。
Errorは、Throwableのサブクラスであり、妥当なアプリケーションがキャッチしようとしてはならない重大な問題を示します。このようなエラーのほとんどは異常な状態です。ThreadDeathエラーは、「通常の」状態ですが、ほとんどのアプリケーションがエラーをキャッチしようとしてはならないため、Errorのサブクラスでもあります。
これらのエラーは発生してはならない異常な状態であるため、メソッドのthrows句でメソッドの実行中にスローされてもキャッチされないErrorのサブクラスをメソッドで宣言する必要はありません。
OTOH、例外について、Java APIは次のように述べています。
クラスExceptionおよびそのサブクラスは、合理的なアプリケーションがキャッチする可能性のある条件を示すThrowableの形式です。
エラーは、アプリケーションまたはプログラムが実行される環境が原因で発生します。ほとんどの場合、アプリケーションまたはプログラムが終了するため、回復できません。Javadocは、JVMなどの環境でこのようなエラーが発生した場合でも終了するため、そのようなエラーをキャッチする必要がないことを推奨しています。
例:
VirtualMachineError
-Java仮想マシンが壊れているか、Java仮想マシンが動作を継続するために必要なリソースを使い果たしたことを示すためにスローされます。
OutOfMemoryError
JVMがメモリ不足になるか、
StackOverflowError
、スタックが実行されると発生します。
例外は、アプリケーションまたはプログラム自体によって引き起こされます。多分あなた自身のミスが原因です。ほとんどの場合、そこから回復でき、アプリケーションは引き続き実行されます。このようなエラーをキャッチして、アプリケーションまたはプログラムの異常終了を防止したり、例外メッセージをカスタマイズしたりして、デフォルトの醜い例外メッセージではなく、適切にフォーマットされたメッセージが表示されるようにすることをお勧めします。
例:
NullPointerException
アプリケーションがnullオブジェクトにアクセスしようとしたときに発生します。または存在しないインデックスを持つ配列にアクセスしようとしたか、間違ったデータまたはパラメーターで関数を呼び出しました。
Unchecked exceptions != RuntimeExceptions
ます。Unchecked exceptions = RuntimeExceptions + Errors
。私はそれが問題を提起することを知っています:エラーは例外ですか?、しかしこれは彼らが書いたものです。ここにそれらの例の1つを示します:docs.oracle.com/javase/tutorial/essential/exceptions/…。