Javaの例外ハンドラとは
Javaでは、例外はプログラムの制御フローを管理する多くの構造のうちの1つです。 具体的には、プログラムの通常の実行による意図しない副作用です。 例外に遭遇する可能性のあるコードを書くとき、プログラマーは、プログラムが例外に遭遇した場合にそのプログラムのための新しい命令を定義しなければなりません。これは「例外処理」として知られているプロセスです。 例外ハンドラは、try、catch、そしてfinallyという3つの異なるブロックで構成されています。
Javaの例外
プログラムが予期しない動作をするメソッドを呼び出すと、「例外」が発生したと言われます。 たとえば、プログラムが数値をゼロで除算しようとしたり、存在しないファイルをロードしようとすると、プログラムは期待どおりに動作せず、このエラーを通知する例外をスローします。 メソッド本体で例外をスローするようにメソッドが定義されている場合は、例外ハンドラ内でのみ呼び出すことができます。または、それを呼び出すメソッドも同じ例外をスローすると宣言してエラーをツリーに渡すことができます。
ブロックを試す
成功した例外ハンドラでは、 "try {exceptionThrowingMethod();}"のように、例外をスローするメソッドを "try"ブロックに含める必要があります。tryブロックが定義された後、プログラマは例外メソッドをキャッチするcatchブロックを定義します。 tryブロックthrowに含まれています。
キャッチブロック
単一のtryブロックは、例外が発生したときに異なる動作を定義するために複数の "catch"ブロックを持つことができます。 プログラムが複数のcatchブロックで定義されている例外に遭遇すると、一番上のcatchブロックが最初に実行されます。 すべての例外は例外クラスから派生するので、最初のcatchブロックが "catch(Exception e){}"を読み取ると、プログラムは例外が発生したときに必ずそのブロックを実行し、それ以外の場合はそのブロックを実行しません。 プログラムをきめ細かく制御したい場合は、catchブロックを最も特定度の高いものから最も特定性の低いものに並べ替えます。
最後にブロック
「finally」ブロックは、例外ハンドラのオプションのコンポーネントです。 例外が発生した場合でも常に実行される動作を定義するために使用します。 場合によっては、tryブロックの最後の部分が実行されることを保証できないために必要になります。 例外がスローされてキャッチされると、その時点でそのブロックは中断されます。 たとえば、finallyブロックに "InputStream.close()"を配置すると、コードの前半でスローされた例外に関係なく、ストリームは安全に閉じられます。