Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java入門】printStackTrace()とgetMessage()の違いを徹底解説!例外情報の取得方法を使い分けよう

Javaで発生した例外(Exception)の詳細情報を確認する方法は主に2つあります。それがprintStackTrace()メソッドgetMessage()メソッドです。どちらもThrowableクラスに定義されたメソッドですが、出力される情報量や用途が大きく異なります。本記事では、それぞれの特徴と具体的な使い方をサンプルコード付きで解説します。

printStackTrace()メソッドとは

  • java.lang.Throwableクラスで定義されており、java.lang.Errorクラスおよびjava.lang.Exceptionクラスに継承されています。
  • 例外のクラス名、エラーメッセージの内容、そして例外が発生した行番号(スタックトレース)まで詳細に出力します。

デバッグ時に原因箇所を特定したい場合に特に役立つメソッドです。

サンプルコード

public class PrintStackTraceMethod {
    public static void main(String[] args) {
        try {
            int a[] = new int[5];
            a[5] = 20;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

実行結果

java.lang.ArrayIndexOutOfBoundsException: 5
        at PrintStackTraceMethod.main(PrintStackTraceMethod.java:5)

このように、例外の種類(ArrayIndexOutOfBoundsException)、メッセージ(5)、発生したファイル名と行番号(PrintStackTraceMethod.java:5)がすべて出力されます。

getMessage()メソッドとは

  • java.lang.Throwableクラスで定義されており、java.lang.Errorクラスおよびjava.lang.Exceptionクラスに継承されています。
  • 例外のメッセージ部分のみを出力します。スタックトレース(行番号などの発生位置情報)は含まれません。

ユーザーへのエラーメッセージ表示など、簡潔な情報だけが必要な場面に適しています。

サンプルコード

public class GetMessageMethod {
    public static void main(String[] args) {
        try {
            int x = 1 / 0;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

実行結果

/ by zero

この例では、ゼロ除算が発生していますが、出力されるのはメッセージ「/ by zero」だけです。どこで例外が発生したかという情報は表示されません。

両者の違いまとめ

項目printStackTrace()getMessage()
定義されているクラスjava.lang.Throwablejava.lang.Throwable
出力内容例外名+メッセージ+スタックトレース(行番号)例外メッセージのみ
出力先標準エラー出力(System.err)戻り値として返る(任意の場所へ出力可)
主な用途デバッグ・障害解析ログ記録やユーザー向けメッセージ表示

使い分けのポイント

開発中やトラブルシューティング時は、例外の発生場所まで把握できるprintStackTrace()が便利です。一方、本番環境でのログ出力やユーザーへの通知では、必要な情報だけを取得できるgetMessage()の方が柔軟に扱えます。状況に応じて適切に使い分けることで、より効率的な例外処理を実現できます。

  1. JavaのJFrameとJDialogの違いとは?特徴と使い分けを解説

    JavaのSwingには、ウィンドウを表示するためのトップレベルコンテナとしてJFrameとJDialogが用意されています。どちらもよく似た役割を持ちますが、動作や用途には重要な違いがあります。この記事では、それぞれの特徴をサンプルコードとともに解説し、最後に使い分けのポイントをまとめます。 JFrameとは フレームに追加されたコンポーネントは「コンテンツ」として扱われ、contentPaneによって管理されます。JFrameにコンポーネントを追加する際は、フレーム本体ではなくcontentPaneに対して追加する必要があります。 JFrameは、タイトル、境界線、(オプションで)メニュ

  2. JavaのGridLayoutとGridBagLayoutの違いを徹底解説!特徴と使い分けのポイント

    JavaのAWT/Swingには複数のレイアウトマネージャーが用意されていますが、その中でもGridLayoutとGridBagLayoutは、コンポーネントを格子状(グリッド)に配置するという点でよく似ています。しかし、両者には重要な違いがあります。 GridLayoutは、すべてのコンポーネントを矩形のグリッド内に配置し、領域を同じサイズの長方形に分割して、各コンポーネントをそれぞれのセルの中に収めます。一方、GridBagLayoutは柔軟性の高いレイアウトマネージャーであり、コンポーネントのサイズを揃えることなく、縦方向・横方向に整列させて配置できます。各GridBagLayoutオブ