はじめに
Java では、例外はプログラムの実行中に発生する例外的なイベントを示すためにスローされます。Java は多数の組み込み例外を提供していますが、特定の状況で独自のカスタム例外を定義する必要がある場合もあります。カスタム例外には 2 種類あります。チェック例外と非チェック例外です。チェック例外はコンパイル時に処理する必要がある例外であり、非チェック例外は実行時にのみ検出されます。この実験では、両方の種類のカスタム例外を作成し、それらを使用する方法を学びます。
Java では、例外はプログラムの実行中に発生する例外的なイベントを示すためにスローされます。Java は多数の組み込み例外を提供していますが、特定の状況で独自のカスタム例外を定義する必要がある場合もあります。カスタム例外には 2 種類あります。チェック例外と非チェック例外です。チェック例外はコンパイル時に処理する必要がある例外であり、非チェック例外は実行時にのみ検出されます。この実験では、両方の種類のカスタム例外を作成し、それらを使用する方法を学びます。
まず、get()
メソッドを持つ配列を実装するために、MyArray
という名前の Java クラスを作成します。このメソッドは、インデックスが無効な場合に例外をスローする可能性があります。
public class MyArray {
int[] array;
public MyArray(int size) {
array = new int[size];
for (int i = 0; i < size; i++) {
array[i] = i * 5;
}
}
// 例外をスローする可能性のある Get メソッド
public int get(int index) {
if (index >= array.length) {
throw new IndexOutOfBoundsException("Index " + index + " is invalid.");
} else {
return array[index];
}
}
}
Exception
クラスを拡張することで、カスタムチェック例外を作成できます。この例では、インデックスが無効な場合に IndexNotValidException
を作成します。この例外は、MyArray
クラスの get()
メソッドによってスローされます。
public class IndexNotValidException extends Exception {
public IndexNotValidException(String message) {
super(message);
}
}
これで、MyArray
クラスの get()
メソッドを更新して、このカスタム例外をスローすることができます。
public int get(int index) throws IndexNotValidException {
if (index >= array.length) {
throw new IndexNotValidException("Index " + index + " is invalid.");
} else {
return array[index];
}
}
カスタムチェック例外を処理するには、Demo
クラスで get()
メソッドが呼び出されるときに、それをキャッチするか、throws
キーワードを使用して宣言する必要があります。
public class Demo {
public static void main(String[] args) {
MyArray arr = new MyArray(5);
try {
System.out.println(arr.get(10)); // Throws IndexNotValidException
} catch (IndexNotValidException e) {
System.err.println(e.getMessage());
}
}
}
Exception
クラスではなく、RuntimeException
クラスを拡張することで、カスタム非チェック例外を作成できます。次の例では、インデックスが無効な場合に IndexNotValidRuntimeException
を作成します。この例外は、MyArray
クラスの get()
メソッドによってスローされます。
public class IndexNotValidRuntimeException extends RuntimeException {
public IndexNotValidRuntimeException(String message, Throwable cause) {
super(message, cause);
}
}
また、根本的な例外や、私たちの例外の原因を定義する Throwable 例外を定義します。私たちの場合、根本的な例外は ArrayIndexOutOfBounds
です。MyArray
クラスの get()
メソッドを更新して、カスタム非チェック例外をスローすることができます。
public int get(int index) {
if (index >= array.length) {
Throwable cause = new ArrayIndexOutOfBoundsException();
throw new IndexNotValidRuntimeException("Index " + index + " is invalid.", cause);
} else {
return array[index];
}
}
カスタム非チェック例外をキャッチしたり宣言したりする必要はありません。次の例では、Demo
クラスで無効なインデックスで get()
メソッドが呼び出されると、IndexNotValidRuntimeException
がスローされます。
public class Demo {
public static void main(String[] args) {
MyArray arr = new MyArray(5);
System.out.println(arr.get(10)); // Throws IndexNotValidRuntimeException
}
}
カスタム Java 例外は、アプリケーション内の特定のエラーや例外を、私たちのニーズに合わせた例外を作成することで効果的に処理するのに役立ちます。この実験では、ビジネスロジックやワークフローのエラーを処理するために独自のカスタム例外を作成する方法を学びました。また、チェック例外と非チェック例外の両方を作成する方法についても、それぞれの例を挙げて説明しました。