103 「例外修羅道」 Step09 解答例

ExceptionUtil.java

public class ExceptionUtil {

    public static void traceError(int[] array, int index, int divisor) {
        try {
            // 指定されたインデックスの値を取り出し、割り算を行う
            int value = array[index];
            int result = value / divisor;
            System.out.println("計算結果: " + result);
        } catch (Exception e) {
            // エラー発生時に詳細情報を出力
            System.out.println("エラーが発生しました");
            System.out.println("原因: " + e.getMessage());
            e.printStackTrace(); // スタックトレースを出力(開発用)
        }
    }
}

解説:例外の原因を追跡する3つの情報

このステップでは、例外が発生したときにその詳細をログ出力する方法を学びます。


1. 固定メッセージ

System.out.println("エラーが発生しました");

ユーザー向けやログ監視用の基本的なアラート表示。


2. getMessage() で原因を要約

System.out.println("原因: " + e.getMessage());
  • / by zeroIndex 5 out of bounds for length 3 のように、エラーの主な内容を表示
  • ユーザーへの表示や、簡易ログに向いている

3. printStackTrace() で技術者向け詳細ログ

e.printStackTrace();
  • 例外が「どこで発生したか」までわかる
  • 開発中のデバッグや、ログファイルへの出力に有効
  • 本番環境ではログライブラリ(Log4j など)と連携してファイル出力するのが一般的

出力例(エラー時)

エラーが発生しました
原因: / by zero
java.lang.ArithmeticException: / by zero
    at ExceptionUtil.traceError(ExceptionUtil.java:5)
    ...

まとめ:このステップで学ぶべきこと

  • 例外発生時に何が起きたかをユーザーにも開発者にも伝える手段を持つことが重要
  • getMessage()printStackTrace() を組み合わせて、適切なレベルの情報提供ができるようにする
  • 開発現場では、これらの出力をログファイルに残す設計が基本

103 ステップアップ問題 「例外修羅道」


Just Keep Typing, Baby!では、この「例外修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!

// tesh:
// コードは書けた。でも、それだけで終わっていいのか?