例外のチェックは、プログラミングとソフトウェアのテストにおいて最も重要なことの XNUMX つです。 Checked And Unchecked Exception は、バグやエラーをキャッチしようとしているときに、プログラムの実行を停止します。
さらに、これらのエラーが発生しないようにすることは、プログラマーの責任であると考えられています。 チェックされた例外とチェックされていない例外は非常に似ていますが、異なります。
主なポイント
- コンパイラはコンパイル時にチェック済み例外をチェックし、try-catch ブロックまたは throws キーワードを使用してプログラマーが処理する必要がありますが、チェックされていない例外は実行時に発生し、処理する必要はありません。
- チェック例外はファイルが見つからないなどの回復可能なエラーに使用され、非チェック例外はメモリ不足やヌル ポインタ例外などの回復不可能なエラーに使用されます。
- チェックされた例外はメソッドのシグネチャの一部ですが、チェックされていない例外はそうではありません。
チェックされた例外とチェックされていない例外
チェック例外と非チェック例外の違いは、チェック例外は checks() ステートメントでキャッチして処理する必要があり、そうしないとプログラムが終了し、スタック トレースが出力されるのに対し、非チェック例外はキャッチしたり処理する必要はまったくなく、これらのエラーが発生しないようにするのはプログラマの責任であることです。

Checked 例外は、catch ブロックによってキャッチされるか、メソッドの throws 句で指定されるまで、プログラムの実行を停止する特定のタイプの例外です。プログラムが終了し、スタック トレースが出力されます。
例外の原因となったコードが適切にテストされていない場合、見つけて修正するのが難しい奇妙な Unchecked の例外的なバグが発生する可能性があります。
さらに、これらのエラーが発生しないようにすることはプログラマーの責任であるため、未チェックの例外をキャッチまたは処理する必要はまったくありません。
比較表
比較のパラメータ | チェックされた例外 | 未チェックの例外 |
---|---|---|
定義 | チェック例外とは、checks() ステートメントでキャッチして処理する必要がある例外です。 | 未チェックの例外をキャッチまたは処理する必要はまったくありません。 |
発生 | catch ブロックは、コンパイル時にチェック例外を処理する必要があります。 | ランタイム例外とも呼ばれるキャッチされない例外は、未チェックの例外です。 |
エラー処理 | チェックされた例外は、バグまたはエラーをキャッチしようとするまで、プログラムの実行を停止します。 | これらのエラーが発生しないようにするのは、プログラマの責任です。 |
例外クラス | 例外的なクラスがあります。 | 例外的なクラスがないか、例外的なクラスの主要部分ではありません。 |
例 | OutOfMemoryError、NullPointerException、および StackOverflowError。 | IndexOutOfBoundsException |
チェック例外とは
チェック済み例外はソフトウェアのテストと密接に関連しています。さらに、チェック済み例外は処理する必要がある例外であり、処理しないとプログラムが終了します。
これは、catch ブロックが例外を処理しない場合、throw ステートメントに続くコードが実行されないことを意味します。
チェック例外には XNUMX つの目的があります。エラーが発生したときにプログラムの続行を停止し、そのエラーの場所に関するデバッグ情報を提供します。
コンパイラーはプログラマーに例外の処理を強制しませんが、別のクラスを拡張するすべてのクラスも、そのチェック済み例外をすべて拡張または実装する必要があります。
そうでない場合、拡張クラスのコンパイルは、スーパークラスでチェックされた例外をすべて処理する必要があることを示すコンパイル時エラーで失敗します。これにより、組み込みの障害モードを回避するために継承が使用されることが防止されます。
例外がスローされると、その例外は Eclipse のデバッガーまたはオペレーティング システムに渡され、プログラムは正常に終了します。オペレーティング システムはスタック トレースを出力します。
スタック トレースは、呼び出された順序で各メソッド呼び出しの情報を提供します。 これにより、プログラマーは、コード内のどこで、またはコードの実行フローのどこで例外が発生したかを見つけることができます。
非チェック例外とは何ですか?
非チェック例外は、プログラマーがより柔軟かつ効率的にプログラミングできるようにするために存在します。 Java は、プログラマーがリソースを効率的に使用し、デッドロックの発生を回避するアプリケーションを作成できるように設計されています。
チェックされていない例外は、慎重な設計とコーディングの慣行によって排除できます。 ただし、Java コードの NullPointerException を除くすべての例外はチェックされていないと見なされます。
チェックされていない例外をキャッチまたは処理する必要はまったくありません。
さらに、これらは、高レベルのコードが低レベルのコードに、スレッドセーフではないことを実行することを伝える方法ですが、特定の時点で実行されているスレッドが XNUMX つしかない場合は問題は発生しません。一部のデータの更新または画面上の一部のグラフィックのレンダリング。
チェックされていない例外を使用することは、危険な命題です。 クラスがチェックされていない例外をスローする場合、そのクラスを使用する人は誰でもそれを認識し、それを処理するためのいくつかの厳密な方法を用意する必要があります.
たとえば、プログラマーがファイルからデータを読み取ってから再度書き戻す場合、この種の機能には同期は必要ありません。
システムのパフォーマンスや安定性に悪影響を与えることなく、アプリケーションが XNUMX つの異なるスレッドで同じデータを XNUMX 回読み取ることはまったく問題ありません。
チェックされた例外とチェックされていない例外の主な違い
- チェックされた例外は、checks () ステートメントでキャッチして処理する必要がある例外です。一方、チェックされていない例外は、キャッチして処理する必要はまったくありません。
- チェックされた例外は、コンパイル時に catch ブロックによって処理される必要がありますが、キャッチされていない例外 (実行時例外とも呼ばれます) は、チェックされていない例外です。
- チェックされた例外は、バグまたはエラーをキャッチしようとするまでプログラムの実行を停止しますが、未チェックの例外は、これらのエラーが発生しないようにするプログラマの責任です。
- チェックされた例外には例外的なクラスがありますが、チェックされていない例外には例外的なクラスがないか、例外的なクラスの主要な部分ではありません。
- チェックされた例外の例は OutOfMemoryError、NullPointerException、および StackOverflowError であり、未チェックの例外の例は IndexOutOfBoundsException です。