🐕

[Java]エラー と 例外 について(備忘録)

2025/01/03に公開

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("処理が終了しました");
        }
    }
}
実行結果
エラー: 配列のインデックスに誤りがあります
処理が終了しました

解説:
.配列arrayのインデックスは array[0]~array[2] です。
array[3] にアクセスしようとすると、存在しないインデックスにアクセスすることになります。
その為、1つ目のcatchブロック内の処理が実行されます。
.0で整数を割っているにも拘わらず、1つ目のcatchブロック内の処理が実行されたので、2つ目のcatchブロック内の処理は実行されません。

5.参考

8.1 例外とエラーについて
【Java】try-catchで例外処理を実装しよう!Exceptionクラスの使い方

6.その他

実行環境

Discussion