広告

Java : Exception (チェック例外) - API使用例

Exception (Java SE 22 & JDK 22) の使い方まとめです。
ほとんどのメソッドにサンプルコードがあります。
APIドキュメントのおともにどうぞ。


概要

Exceptionクラスとそのサブクラスは、通常のアプリケーションでキャッチされる可能性のある状態を示すThrowableの形式の1つです。

クラス構成

注意:

  • 通常のプログラムでは Exception を直接作成することはおすすめしません。
    (catch のときに RuntimeException と区別ができなくなるため)

  • Exception の代わりに Exception のサブクラスを使いましょう。

  • 本記事では SampleException というサブクラスを使い、それをメインにコード例を記載していきます。

関連 : 例外 vs. 戻り値でエラーチェック

@SuppressWarnings("serial")
public class SampleException extends Exception {

    public SampleException() {
    }

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

    public SampleException(String message, Throwable cause) {
        super(message, cause);
    }

    public SampleException(Throwable cause) {
        super(cause);
    }

    public SampleException(String message, Throwable cause,
                           boolean enableSuppression,
                           boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
public class Main {

    public static void main(String[] args) {
        try {
            func1();
        } catch (SampleException ex) {

            final Exception e = ex;
            e.printStackTrace();

            // 結果
            // ↓
            //SampleException
            //	at Main.func2 ...
            //	at Main.func1 ...
            //	at Main.main ...
            // ...
        }
    }

    private static void func1() throws SampleException {
        func2();
    }

    private static void func2() throws SampleException {
        throw new SampleException();
    }
}

コンストラクタ

Exception ()

詳細メッセージがnullである新規例外を構築します。

final Exception e = new SampleException();
System.out.println(e); // SampleException

Exception (String message)

指定された詳細メッセージを持つ、新規例外を構築します。

final Exception e = new SampleException("abcde");
System.out.println(e); // SampleException: abcde
System.out.println(e.getMessage()); // abcde

Exception (String message, Throwable cause)

指定された詳細メッセージおよび原因を使用して新規例外を構築します。

final Exception cause = new SampleException("XYZ");
final Exception e = new SampleException("abcde", cause);

System.out.println(e); // SampleException: abcde
System.out.println(e.getMessage()); // abcde

System.out.println(e.getCause()); // SampleException: XYZ
System.out.println(e.getCause().getMessage()); // XYZ

Exception (String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)

指定された詳細メッセージ、原因、抑制の有効化または無効化、書込み可能スタック・トレースの有効化または無効化に基づいて、新しい例外を構築します。

final Exception cause = new SampleException("XYZ");
final Exception e = new SampleException("abcde", cause, true, true);

System.out.println(e); // SampleException: abcde
System.out.println(e.getCause()); // SampleException: XYZ

e.addSuppressed(new SampleException("E1"));
e.addSuppressed(new SampleException("E2"));

// [SampleException: E1, SampleException: E2]
System.out.println(Arrays.toString(e.getSuppressed()));

System.out.println(e.getStackTrace().length > 0); // true
// enableSuppression = false
final Exception cause = new SampleException("XYZ");
final Exception e = new SampleException("abcde", cause, false, true);

System.out.println(e); // SampleException: abcde
System.out.println(e.getCause()); // SampleException: XYZ

e.addSuppressed(new SampleException("E1"));
e.addSuppressed(new SampleException("E2"));
System.out.println(Arrays.toString(e.getSuppressed())); // []

System.out.println(e.getStackTrace().length > 0); // true
// writableStackTrace = false
final Exception cause = new SampleException("XYZ");
final Exception e = new SampleException("abcde", cause, true, false);

System.out.println(e); // SampleException: abcde
System.out.println(e.getCause()); // SampleException: XYZ

e.addSuppressed(new SampleException("E1"));
e.addSuppressed(new SampleException("E2"));

// [SampleException: E1, SampleException: E2]
System.out.println(Arrays.toString(e.getSuppressed()));

System.out.println(e.getStackTrace().length); // 0

Exception (Throwable cause)

指定された原因と詳細メッセージ(cause==null ? null : cause.toString())を持つ新しい例外を構築します(通常、causeのクラスと詳細メッセージを含みます)。

final Exception cause = new SampleException("XYZ");
final Exception e = new SampleException(cause);

System.out.println(e); // SampleException: SampleException: XYZ
System.out.println(e.getMessage()); // SampleException: XYZ

System.out.println(e.getCause()); // SampleException: XYZ
System.out.println(e.getCause().getMessage()); // XYZ

Throwableで宣言されたメソッド

addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString

Java API 使用例 : Throwable」をご参照ください。


関連記事

ページの先頭へ