今回はJavaの例外処理について記事にしたいと思います。
例外とは、プログラムが予想外の問題に遭遇したときに発生するエラーのことです。たとえば、次のような状況が考えられます:
数字を入力する場面で、文字を入力してしまった。
ファイルを読み込もうとしたけど、そのファイルが存在しなかった。
0で割ろうとした(これは数学的に禁止されています)。
こうした状況が起きたとき、プログラムは通常止まってしまいますが、例外処理を使うことで、エラーに対処しながらプログラムを続けることができます。
- 例外処理(try ~ catch)
Javaでは、エラーが発生する可能性がある部分に対して、tryブロックとcatchブロックを使って、エラーが起きたときにどう対処するかを指定します。
tryブロックには、エラーが起こるかもしれない処理を書きます。
catchブロックには、エラーが起きたときにどうするかを書きます。
コードをコピーする
try {
int result = 10 / 0; // ここでエラーが発生
} catch (ArithmeticException e) {
System.out.println("エラー:0で割ることはできません");
}
このように、エラー(例外)に備えて事前に対処法を決めておくことができます。
- 例外の継承関係
継承は、プログラムのクラスが他のクラスの特性を受け継ぐことです。例外もクラスとして定義されており、例外の種類ごとにクラスがあります。たとえば、次のような継承関係があります:
Exceptionクラスが全ての例外の親クラスです。
ArithmeticException(数学的なエラー)
IOException(ファイル入出力エラー)
これによって、複数の種類のエラーをまとめて処理することができるのです。
- 非チェック例外
非チェック例外は、コンパイル時にはチェックされない例外のことです。つまり、プログラムを書く段階では注意を払わず、実行して初めてエラーに気づくものです。
例:ArithmeticExceptionやNullPointerExceptionなどは非チェック例外で、プログラムを書いている段階でチェックされません。
例:
int a = 0;
int result = 10 / a; // ここで実行時に例外が発生(非チェック例外)
- 例外を投げる
Javaでは、プログラムの中で自分で意図的に例外を発生(投げる)させることができます。これを例外を投げる(throwする)と言います。
if (age < 0) {
throw new IllegalArgumentException("年齢は0以上でなければなりません");
}
この例では、年齢がマイナスになっている場合に、プログラムの中で例外を意図的に投げています。これにより、間違った入力があったときに適切にエラーを処理することができます。
まとめ
例外とは:プログラムがエラーに遭遇したときに発生する問題。
例外処理(try ~ catch):エラーが起きてもプログラムが止まらないように対処する仕組み。
例外の継承関係:例外もクラスとして定義され、親子関係がある。親クラスを使って、複数の種類の例外をまとめて処理できる。
非チェック例外:コンパイル時にチェックされない例外。プログラム実行中に発生する。
例外を投げる:自分で意図的にエラーを発生させることで、プログラムの流れをコントロールする。
今回は例外について記事にしてみました。