はじめに
前回の記事では、Javaの列挙型について紹介しました。
前回の記事
本記事では、Javaの例外について紹介します。
例外とは
例外とは、プログラムを実行したときに起こるエラーのことです。
プログラムを作る時、正常系(想定している正しい動作)の動作を作るのは当たり前のことです。ただ、正常系の動作しか考慮していないと、想定外の使われ方をしたときやプログラムにバグ(プログラムに潜む誤り)があるとき、通信異常が発生したときなどに問題が発生します。
そのため、プログラムを作るときは異常系(想定していない操作)の動作を考慮して作成することが大切です。
スポンサーリンク
例外が発生した場合の処理を記述することで、異常終了を防ぐことができます。
例外処理の流れ
例外が起こりそうな処理には、try文、catch文、finally文を使います。
try{}内に例外が起こりそうな処理を記述します。
そして、catch{}内には、例外が発生した時に行う処理を記述します。try{}内で例外が発生した場合、catch{}内の処理が動き出します。catchでは、例外クラスのオブジェクトを受け取ります。例外クラスのオブジェクトには、どんな例外がどこで発生したのかの情報が格納されています。
最後に、finally{}内の処理は例外発生の有無に関わらず行う処理を記述します。finally文は省略可能なので、必要がなければ書かなくて大丈夫です。
正常時の流れ
- try内の処理を実行
- finally内の処理を実行(finallyは省略可能なのでfinallyが存在する場合のみ実行)
例外発生時の流れ
- try内の処理を実行
- 例外発生(例外が発生した時点でtry内の処理は中断しcatch文へ)
- catch内の処理を実行
- finally内の処理を実行(finallyは省略可能なのでfinallyが存在する場合のみ実行)
スポンサーリンク
try-catchの実装例
それでは、実際にソースコードで try-catch の使用例を紹介します。
まず、例外が発生しないときの動きを確認します。
[例外発生なしの例]
public class TryOKSample {
public static void main(String[] args) {
try {
int[] num = new int[1];
num[0] = 1;
System.out.println("正常終了しました");
} catch (Exception e) {
System.out.println("エラーが発生しました");
e.printStackTrace();
} finally {
System.out.println("処理を終了します");
}
}
}
[実行結果]
正常終了しました
処理を終了します
実行した結果、try{}内の処理と、finally{}内の処理が実行され、catch{}内の処理は実行されませんでした。
次に例外が発生するときの動きを確認します。配列の範囲外を指定して例外を発生させています。
public class TryNGSample {
public static void main(String[] args) {
try {
int[] num = new int[1];
// 配列の範囲外を指定、ここで例外が発生
num[1] = 1;
System.out.println("正常終了しました");
} catch (Exception e) {
System.out.println("エラーが発生しました");
e.printStackTrace();
} finally {
System.out.println("処理を終了します");
}
}
}
[実行結果]
エラーが発生しました
java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
at course22.TryNGSample.main(TryNGSample.java:10)
処理を終了します
実行した結果、try{}内の処理「num[1] = 1;」で例外が発生したため、try{}内の処理は途中で中断し、catch{}内の処理とfinally{}内の処理が実行されています。
また、catch{}内の処理「e.printStackTrace();」でエラー内容とエラーが発生した場所の情報を出力しています。
終わりに
本記事では、Javaの例外について紹介しました。
次回の記事では、Java APIについて紹介します。
次回の記事