ケアレスミスを無くす章
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)
『まとめ』
例外オブジェクトには、例外の元となった様々な情報が詰まっています。
原因究明のため、例外は無駄にしないようにしましょう。
-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針