Java の例外処理について

Java の例外処理について

Java の例外処理は、プログラムの実行中に発生するエラーや予期しない状況を適切に処理するためのメカニズムです。このページでは、Java の例外処理について詳しく説明し、具体例を示します。

例外とは何か

例外とは、プログラムの実行中に発生する予期しないエラーや問題を指します。例えば、配列の範囲外にアクセスしようとしたり、null オブジェクトにアクセスしようとした場合などに発生します。

例外が発生すると、プログラムの通常のフローが中断され、例外がスローされます。Java では、このような例外を処理するために try-catch 文や他の構文が提供されています。

例外の階層構造

Java の例外は、以下のような階層構造を持っています。

  • Throwable: すべての例外とエラーのスーパークラス。
  • Error: JVM による重大なエラー(例:OutOfMemoryError)。通常は開発者が処理しません。
  • Exception: 一般的な例外クラス。開発者が処理すべきもの。
  • RuntimeException: 実行時例外(例:NullPointerException)。チェックされない例外。

例外は、チェックされる例外とチェックされない例外に分類されます。

try-catch 文

try-catch 文を使用して、例外が発生した場合の処理を記述します。


public class TryCatchExample {
    public static void main(String[] args) {
        try {
            int[] numbers = {1, 2, 3};
            System.out.println(numbers[5]); // 配列範囲外アクセス
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("例外が発生しました: " + e.getMessage());
        }
    }
}
    

このコードでは、ArrayIndexOutOfBoundsException をキャッチしてエラーメッセージを表示します。

finally ブロック

finally ブロックは、例外の有無に関わらず必ず実行されるコードを記述するために使用されます。


public class FinallyExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0; // 例外が発生
        } catch (ArithmeticException e) {
            System.out.println("例外が発生しました: " + e.getMessage());
        } finally {
            System.out.println("このコードは必ず実行されます。");
        }
    }
}
    

この例では、例外が発生しても finally ブロックが実行されます。

throw と throws

throw を使用して明示的に例外をスローすることができます。一方、throws はメソッドがスローする可能性のある例外を宣言するために使用します。


public class ThrowExample {
    public static void main(String[] args) {
        try {
            validateAge(15);
        } catch (IllegalArgumentException e) {
            System.out.println("例外が発生しました: " + e.getMessage());
        }
    }

    public static void validateAge(int age) {
        if (age < 18) {
            throw new IllegalArgumentException("年齢は18歳以上でなければなりません。");
        }
    }
}
    

public class ThrowsExample {
    public static void main(String[] args) {
        try {
            riskyMethod();
        } catch (Exception e) {
            System.out.println("例外が発生しました: " + e.getMessage());
        }
    }

    public static void riskyMethod() throws Exception {
        throw new Exception("リスクの高い操作中にエラーが発生しました。");
    }
}
    

カスタム例外

独自の例外クラスを作成することもできます。


public class CustomExceptionExample {
    public static void main(String[] args) {
        try {
            throw new CustomException("カスタム例外が発生しました。");
        } catch (CustomException e) {
            System.out.println("例外がキャッチされました: " + e.getMessage());
        }
    }
}

class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}
    

一般的な例外の例

  • NullPointerException: null オブジェクトを参照した場合に発生。
  • ArrayIndexOutOfBoundsException: 配列の無効なインデックスにアクセスした場合に発生。
  • ArithmeticException: 0 で除算した場合に発生。
  • IOException: 入出力エラーが発生した場合にスローされる。
  • FileNotFoundException: 指定したファイルが存在しない場合に発生。

これらの例外を適切に処理することで、プログラムの信頼性を向上させることができます。

まとめ

Java の例外処理は、プログラムを中断させずにエラーを処理するための重要な機能です。try-catch 文や finally ブロック、カスタム例外などを駆使することで、より堅牢なプログラムを作成できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です