例外階層では、 RuntimeException
の子孫と Error
の子孫は実行時の例外/エラーです。
2つの違いは次のとおりです。 RuntimeException
の下にあるものは、プログラミング/設計が不十分なために発生したものであり、 Error
の下のものは、開発者が制御できない/すべきでないもの。
アプリケーション内で例外をコーディングする場合、たとえば、ビジネスロジックで何かが発生したときに例外をスローするように、 RuntimeException
が拡張されています。
問題は、拡張 RuntimeException
と拡張 Error
-の違いは何ですか? Error
は悪い習慣ですか?
Error
とRuntimeException
は両方ともチェックされていない例外であり、これはプログラムの欠陥を示しており、通常は検出されません。 (NullPointerException
、IndexOutOfBoundsException
など)
この2つの主な違いは、RuntimeException
はプログラムにエラーがあることを示し、Error
は致命的ですがプログラムの制御外のものであることです。 (OutOfMemorryError
、ThreadDeath
など)
したがってError
をサブクラス化することは悪い習慣です。エラーは通常、実行時にプログラムで修正できるものではないためです。プログラムでは、何かをスローする必要がある場合は、Exception
を使用します。
Qは、RuntimeExceptionの拡張とErrorの拡張の正確な違いは何ですか?ただし、Errorの拡張は悪い習慣です。
主な違いについてはすでに説明しました。 Java言語仕様は同じことを別の言葉で言っています 。Error
については、
Error
は、通常のプログラムが通常回復することが期待されないすべての例外のスーパークラスです。
RuntimeException
については、
クラス
RuntimeException
は、Exceptionの直接のサブクラスです。RuntimeException
は、式の評価中にさまざまな理由でスローされる可能性があるすべての例外のスーパークラスですが、そこから回復が可能である可能性があります 。
これらの引用から取り除くべきことは、一般的に
try {
...
} catch (Exception e) { // catches RuntimeException
...
}
Exception
はRuntimeException
のスーパータイプであるため、すべてのケースをキャッチします。しかし、あなたはほとんど見ないでしょう(私はそれを見たことがありません)
try {
...
} catch (Error e) {
...
}