技術的には、実際には「回復不能エラー」と「回復可能エラー」を区別するのではなく、チェックされた例外とチェックされていない例外を区別します。Javaは次のようにそれらを区別します。
- 句でチェック例外を宣言する必要があります。ブロックで
throwsチェック済み例外をスローするメソッドを使用する場合は、例外を指定するか、この例外をメソッドの句に追加する必要があります。trycatchthrows
- 句で未チェックの例外を宣言できます (推奨されません) 。ブロックで
throwsチェックされていない例外をスローするメソッドを使用している場合は、その例外をスローするか、この例外をメソッドの句に追加することができます (いずれも推奨されません)。try catchthrows
自分が何をしているのか本当によくわかっていない限り、どのような種類のチェックされていない例外 (つまり、catch空のブロックで例外を飲み込む) もお勧めできません。
Exception基本チェック例外クラスです。ErrorとRuntimeExceptionは両方とも未チェックの例外であり、それらのすべてのサブクラスもそうです。Throwable3 つのクラスはすべて extendsであり、javadoc には次のようにThrowable記載されていることに注意してください。
コンパイル時の例外チェックのために、Throwable と、RuntimeException または Error のサブクラスではない Throwable のサブクラスは、チェック済み例外と見なされます。
(悪名高い) 有名な非チェック例外の古典的な例:
OutOfMemoryError(拡張Error);
StackOverflowError(拡張Error);
NullPointerException(拡張RuntimeException);
IllegalArgumentException(拡張RuntimeException);
- などなど
と の唯一の実際の違いはError、RuntimeException推定される重大度レベルであり、技術的な違いではなく「意味論的」な違いです。最終的には、どちらも同じように動作します。一部の IDE (Intellij IDEA が思い浮かびます) は、キャッチしErrorても再スローしないと怒鳴ります。