🐕
[Java]エラー と 例外 について(備忘録)
1.エラーとは
・PDFファイルやCSVファイル等をダウンロードしようとした際、「ファイルを保存するための容量が不足している」「システムトラブル」といった理由で、ダウンロードが失敗することがあります。
このようにプログラムは実行されたが期待結果が得られない問題を、エラーと呼びます。
エラーは、プログラムの正常な実行を妨げる問題であり、プログラムの修正では対処できない場合が多いです。
2.例外とは
・例外は、プログラムを実行して初めて分かる問題のことです。
例外の具体例として、「存在しないファイルを開こうとした」「整数を0で割ろうとした」があります。
例外を適切に処理する為に、例外処理という仕組みを使用します。
3.例外処理の基本的な仕組み
例外処理の基本的な仕組みとして、try/catch
が用意されています。
try/catch の書き方
try {
// 例外が発生する可能性のある処理
} catch (例外クラス 変数名) {
// 例外が発生した場合の処理
} finally {
// 例外の発生有無に関わらず実行される処理(記述するかは任意)
}
重要:
例外が発生すると、例外クラスのインスタンス(オブジェクト)が生成されます。
例外クラスから生成されたインスタンス(オブジェクト)を受け取る為に変数を使用します。
4.サンプルプログラム
〇例1:catch ブロックが1つの場合
Sample_1.java
public class Sample_1 {
public static void main(String[] args) {
try {
// 例外が発生する可能性のある処理
int result = 10 / 0;
} catch (ArithmeticException e) {
// 例外が発生した場合の処理
System.out.println("エラー: 0で割ることはできません");
} finally {
// 例外の発生有無に関係なく実行される処理
System.out.println("処理が終了しました");
}
}
}
実行結果
エラー: 0で割ることはできません
処理が終了しました
〇例2:catch ブロックが複数の場合
Sample_2.java
public class Sample_2 {
public static void main(String[] args) {
try {
// 例外が発生する可能性のある処理
int[] array = {1, 2, 3};
System.out.println(array[3]);
int result = 10 / 0;
} catch (ArrayIndexOutOfBoundsException e) {
// 参照した配列のインデックスに誤りがある場合の例外処理
System.out.println("エラー: 配列のインデックスに誤りがあります");
} catch (ArithmeticException e) {
// 整数を0で割ろうとした場合の例外処理
System.out.println("エラー: 0で割ることはできません");
} finally {
// 例外の発生有無に関わらず実行される処理
System.out.println("処理が終了しました");
}
}
}
実行結果
エラー: 配列のインデックスに誤りがあります
処理が終了しました
解説:
1.配列array
のインデックスは array[0]~array[2]
です。
array[3]
にアクセスしようとすると、存在しないインデックスにアクセスすることになります。
その為、1つ目のcatch
ブロック内の処理が実行されます。
2.0で整数を割っているにも拘わらず、1つ目のcatch
ブロック内の処理が実行されたので、2つ目のcatch
ブロック内の処理は実行されません。
5.参考
・8.1 例外とエラーについて
・【Java】try-catchで例外処理を実装しよう!Exceptionクラスの使い方
6.その他
・実行環境
Discussion