これはインタビューの質問でした。どちらもキャッチされないため、チェックされていない例外とエラーの主な違いは何ですか? 彼らはプログラムを終了します。
8 に答える
名前で示されているように、チェックされていない例外はコンパイル時にチェックされません。つまり、コンパイラは、それらをキャッチしたり、(でthrows
)指定したりするメソッドを必要としません。このカテゴリに属するクラスについては、セクション11.2JLSの例外のコンパイル時チェックで詳しく説明しています。
チェックされていない例外クラスは、クラス
RuntimeException
とそのサブクラス、およびクラスError
とそのサブクラスです。他のすべての例外クラスは、チェックされた例外クラスです。Java APIは、チェックされているものとされていないものの両方で、いくつかの例外クラスを定義します。チェックされているものとされていないものの両方の追加の例外クラスは、プログラマーによって宣言される場合があります。例外クラス階層と、Java APIおよびJava仮想マシンによって定義されたいくつかの例外クラスの説明については、§11.5を参照してください。
次の図は、例外階層を示しています。
クラスError
とそのサブクラスは、通常のプログラムが通常回復することを期待されていない例外であり、11.5で説明されているように例外階層:
このクラスは、プログラムがイディオムを使用できるようにするために、クラス階層内とは異なる、
Error
の別個のサブクラスです。Throwable
Exception
} catch (Exception e) {
通常は回復できないエラーをキャッチせずに、回復が可能な可能性のあるすべての例外をキャッチします。
要約すると、回復が可能な例外のチェックさRuntimeException
れていない例外のサブセットです(ただし、チェックされていない例外は、ここで回答している多くの例外の同義語ではありません)。RuntimeException
JavaDocs はこれらをかなりうまくまとめています。
RuntimeException は、Java 仮想マシンの通常の操作中にスローされる例外のスーパークラスです。
メソッドは、メソッドの実行中にスローされる可能性があるがキャッチされない可能性のある RuntimeException のサブクラスをその throws 句で宣言する必要はありません。
Error は、Throwable のサブクラスであり、合理的なアプリケーションがキャッチしようとすべきではない重大な問題を示します。このようなエラーのほとんどは異常な状態です。ThreadDeath エラーは、「通常の」状態ですが、ほとんどのアプリケーションがキャッチしようとしないため、Error のサブクラスでもあります。
メソッドの throws 句で、メソッドの実行中にスローされる可能性があるが捕捉されない可能性がある Error のサブクラスを宣言する必要はありません。これらのエラーは決して発生してはならない異常な状態であるためです。
「チェックされていない例外」は単に a の同義語であることに注意してくださいRuntimeException
。
注: RuntimeException は未チェックの例外です
チェックされていない例外は、実行のある時点で発生する可能性があることがわかっているがキャッチされていない例外です。コードを try-catch でラップすることでチェックできますが、これは強制されません (例外が何らかの方法で処理されることを強制するチェック済み例外とは異なります)。
エラーは、実行中の任意の時点で発生する可能性があり、特定のメソッド呼び出しなどによって明示的に発生したわけではないため、実際にはキャッチできないものです。たとえば、OutOfMemoryError や StackOverflowError などです。これらは両方ともいつでも発生する可能性があり、アプリケーションが終了する原因になります。これらのエラーをキャッチしても、回復できない何かが発生したことを示しているため、意味がありません。
チェック例外:
Throwable
class exceptを拡張し、checked exception と呼ばれるRuntimeException
クラス。Error
- これらのタイプの例外はコンパイル時にチェックされるため、コンパイル時例外とも呼ばれます。つまり、これらの例外を無視すると (
try/catch
またはthrow
例外で処理されない)、コンパイル エラーが発生します。 - これらは、コードの制御外の予期しない状況 (データベースのダウン、ファイル I/O エラー、間違った入力など) によって引き起こされる、プログラムで回復可能な問題です。
try/catch
ブロックを使用してそれらを回避できます。- 例 :
IOException
などSQLException
未チェックの例外:
- 拡張するクラス
RuntimeException
は、未チェックの例外として知られています - チェックされていない例外は、実行時にチェックされるのではなく、コンパイル時にチェックされません。そのため、「実行時例外」とも呼ばれます。
- これらはプログラムで回復可能な問題でもありますが、チェック例外とは異なり、コード フローまたは構成の障害が原因です。
- 例:
ArithmeticException
、NullPointerException
、ArrayIndexOutOfBoundsException
など - これらはプログラミング エラーであるため、適切に/賢明にコーディングすることで回避できます。たとえば、「ゼロ除算」が発生します
ArithmeticEceeption
。単純な if 条件 - でそれらを回避できますif(divisor!=0)
。同様にNullPointerException
、単に参照をチェックするif(object!=null)
か、さらに優れた手法を使用することで回避できます
エラー:
Error
try/catch によって処理されていない回復不能な状況を指します- 例:
OutOfMemoryError
、VirtualMachineError
などAssertionError
。
エラーは、発生してはならない根本的な問題を示しています。エラーが発生した場合 本当に悪いことが起こりました。
一方、チェックされていない例外 (実行時例外) は、何らかの理由で例外が予想される場合に使用されますが、それを処理する合理的な方法がないため、try catch ステートメントは煩わしく、スペースの無駄になります。
エラー: これらは、アプリケーションの外部にある例外的な状態であり、アプリケーションは通常、予測または回復できません。
実行時例外: これらは、アプリケーションの内部にある例外的な状態であり、アプリケーションは通常、予測または回復できません。
あなたはこれを読みたいかもしれません:
RuntimeExceptions
また、次のようなエラーOutOfMemoryError
はキャッチする必要はなく、アプリケーションを終了する main() に到達するまでスローできます。
その他の例外がキャッチされていないか、スロー リストに含まれていない場合、コンパイル エラーが発生します。
エラーと実行時例外は、まとめて非チェック例外と呼ばれます。
実行時例外は、アプリケーション内部の例外的な状態であり、通常、アプリケーションは予測または回復できません。これらは通常、論理エラーや API の不適切な使用など、プログラミングのバグを示しています。
3 種類の例外について説明しているこのリンクを参照してください。
http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html
これが役立つことを願っています。