019 例外と例外処理(カスタム例外処理戦略) 026 解答例

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

class CustomFileReadException extends Exception {
    private int errorCode;

    public CustomFileReadException(String message, int errorCode) {
        super(message);
        this.errorCode = errorCode;
    }

    public int getErrorCode() {
        return errorCode;
    }
}

public class FileDataReader {
    public static void main(String[] args) {
        String filePath = "sample.txt";

        try {
            processFile(filePath);
        } catch (CustomFileReadException e) {
            System.out.println("エラーコード: " + e.getErrorCode());
            System.out.println("エラーメッセージ: " + e.getMessage());
        }
    }

    static void processFile(String filePath) throws CustomFileReadException {
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line = reader.readLine();
            
            // 仮の条件: ファイルから読み取るデータが期待される形式と異なる場合
            if (line == null || !line.contains("expected_pattern")) {
                throw new CustomFileReadException("ファイルの形式が期待されるものと異なります", 1001);
            }

            // ファイルのデータを処理するロジックをここに追加
            System.out.println("ファイルデータ: " + line);
        } catch (IOException e) {
            // ファイルが見つからない場合
            throw new CustomFileReadException("ファイルが見つかりません", 1002);
        }
    }
}
  1. CustomFileReadException クラスは、Exception クラスを継承し、エラーメッセージとエラーコードを保持するようにしています。
  2. processFile メソッド内でファイルからデータを読み取る処理を行っています。
  3. ファイルのデータが期待される形式と異なる場合、またはファイルが見つからない場合に、CustomFileReadException をスローしています。
  4. main メソッドで例外がキャッチされた場合、エラーコードとエラーメッセージを表示しています。

この例では、仮の条件としてファイルの形式が特定のパターンを含まない場合にエラーとしています。実際の使用ケースに合わせて条件を適切に設定してください。

カスタム例外クラスの作成

カスタム例外クラスの作成は、プログラム内で特定の状況やエラーを表現するために、Javaの例外機構を拡張する手法です。以下は、カスタム例外クラスの基本的な構造と作成の手順についての解説です。

カスタム例外クラスの定義: まず、Exception クラスを継承して新しい例外クラスを作成します。以下はその基本的な構造です。

public class CustomException extends Exception {
    // コンストラクタやメソッドを追加
}


コンストラクタの追加: 通常、カスタム例外クラスには少なくとも1つ以上のコンストラクタが必要です。これにより、エラーメッセージや他の情報を例外にセットできます。

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

    public CustomException(String message) {
        super(message);
    }
}

追加のメソッド: 必要に応じて、カスタム例外には状態や振る舞いを示すための追加のメソッドを追加することがあります。

public class CustomException extends Exception {
    private int errorCode;

    public CustomException(String message, int errorCode) {
        super(message);
        this.errorCode = errorCode;
    }

    public int getErrorCode() {
        return errorCode;
    }
}

例外のスロー: カスタム例外を使用するためには、適切な条件でその例外をスローする必要があります。これには通常、throw new CustomException(“エラーメッセージ”, errorCode); のような形式が使われます。

public class Example {
    public static void main(String[] args) {
        try {
            // ある条件が満たされない場合にカスタム例外をスロー
            if (条件が満たされない) {
                throw new CustomException("エラーが発生しました", 1001);
            }
        } catch (CustomException e) {
            System.out.println("エラーコード: " + e.getErrorCode());
            System.out.println("エラーメッセージ: " + e.getMessage());
        }
    }
}

これにより、特定の状況やエラーをより具体的に表現でき、プログラムの保守性やデバッグが向上します。また、例外ハンドリングの一環として独自の例外クラスを使用することで、エラーの特定や対応が容易になります。


カスタム例外クラスの作成は、Javaプログラミングにおいて柔軟性と効果的なエラーハンドリングを実現するための重要な手法です。状況に応じたエラーを適切に表現し、それに対する処理を行うことで、プログラムの品質と保守性を向上させることができます。

ただし、カスタム例外クラスを適切に使用するには、慎重に計画し、プロジェクト全体で一貫性を持たせることが必要です。また、冗長な例外クラスの作成は避け、プログラムの理解と保守性を損なわないように心がけることも大切です。

独自の例外クラスを使用することで、プログラムが発生する可能性のある異常な状態をより詳細かつ効果的に記述できます。これにより、開発者はエラーの発生源をすぐに特定し、それに対する適切な対処を行うことができます。例外処理はプログラムの信頼性を向上させ、ユーザーエクスペリエンスを向上させる重要な要素であるため、カスタム例外クラスの適切な活用はプログラミングスキルの向上に繋がります。

「019 例外と例外処理」問題集リスト