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
ブロック、カスタム例外などを駆使することで、より堅牢なプログラムを作成できます。