カスタム Java 例外の作成

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Java では、例外はプログラムの実行中に発生する例外的なイベントを示すためにスローされます。Java は多数の組み込み例外を提供していますが、特定の状況で独自のカスタム例外を定義する必要がある場合もあります。カスタム例外には 2 種類あります。チェック例外と非チェック例外です。チェック例外はコンパイル時に処理する必要がある例外であり、非チェック例外は実行時にのみ検出されます。この実験では、両方の種類のカスタム例外を作成し、それらを使用する方法を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/DataStructuresGroup -.-> java/arrays("Arrays") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/constructors("Constructors") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") subgraph Lab Skills java/arrays -.-> lab-117405{{"カスタム Java 例外の作成"}} java/classes_objects -.-> lab-117405{{"カスタム Java 例外の作成"}} java/constructors -.-> lab-117405{{"カスタム Java 例外の作成"}} java/exceptions -.-> lab-117405{{"カスタム Java 例外の作成"}} java/arraylist -.-> lab-117405{{"カスタム Java 例外の作成"}} end

MyArray という名前の Java クラスを作成する

まず、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 例外は、アプリケーション内の特定のエラーや例外を、私たちのニーズに合わせた例外を作成することで効果的に処理するのに役立ちます。この実験では、ビジネスロジックやワークフローのエラーを処理するために独自のカスタム例外を作成する方法を学びました。また、チェック例外と非チェック例外の両方を作成する方法についても、それぞれの例を挙げて説明しました。