ケアレスミスを無くす章

1.4. キャッチした例外は必ず使う

『目的』

例外の原因を追跡できるようにしましょう。

『Before』

FileInputStreamクラスを使おうとしたら例外のキャッチをするようコンパイラに促されたので キャッチ処理を実装しました。これでコンパイルは通って実行することができます。

public void method() {
    try (FileInputStream fis = new FileInputStream("c:\\hoge\\foo\bar.dat")) {
        // ...
    } catch (IOException e) {
        System.out.println("IOException");
    }
}

しかし、実際に例外が発生した場合、『IOException』としか表示されません。
この情報ではどこでなぜ例外が発生したのかを知ることができませんね。

『After』

もうちょっと情報を使いましょう。
たとえば e.getMessage() で詳細メッセージが取得できます。

public void method() {
    try (FileInputStream fis = new FileInputStream("c:\\hoge\\foo\bar.dat")) {
        // ...
    } catch (IOException e) {
        System.out.println("IOException : " + e.getMessage());
    }
}

c:\hoge\foo\bar.dat (指定されたパスが見つかりません。)
また、e.printStackTrace() によってスタックトレースをコンソールへ出力することもできます。
java.io.FileNotFoundException: c:\hoge\foo\bar.dat (指定されたパスが見つかりません。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:106)
at java.io.FileInputStream.(FileInputStream.java:66)
at misc.trycatch.opt.TryCatchTest.method(TryCatchTest.java:30)

『まとめ』

例外オブジェクトには、例外の元となった様々な情報が詰まっています。
原因究明のため、例外は無駄にしないようにしましょう。

< 前のページへ

Pagetop