048-例外処理-複雑な例外処理 【新人エンジニアが最初に覚えたい100のJava文法】
ユーチューブ動画
複雑な例外処理について解説します。
ソースコード
try{ FileReader fr = new FileReader(FILE_PATH); BufferedReader br = new BufferedReader(fr); br.readLine(); br.close(); }catch(FileNotFoundException e){ System.out.println("File Not Found."); }catch(IOException e){ System.out.println("IOException."); }catch(Exception e){ e.printStackTrace(); }
解説
複雑な例外処理について解説します。
以前の動画で例外処理はtry-catchブロックで実現できることを説明しました。
発生する例外は一つとは限りません。
複数の例外にはどのように対処するのでしょうか?
サンプルコードで確認しましょう。
複数の例外が発生する場合は、catchブロックを複数記述することができます。
Catchブロックの書き方は同じです。発生する例外の種類をかっこの中に記述し、例外が発生したときの処理をcatchブロックに記述します。
どんな順番でcatchブロックを書いていいのかというとそうではありません。
この例外をAPIドキュメントで確認してみましょう。
最初に記述した、FileNotFoundExceptionは、指定されたパスで示されるファイルが開けなかった場合に発生する例外です。
ご覧のような継承関係になっています。
このうち、java.lana.Exceptionクラスが重要なクラスです。
このクラスが例外の大本のクラスといってよいのですが、このクラスをcatchブロックで先に記述してしまうと、すべての例外をキャッチしてしまうため、他の例外に行かなくなってしまいます。
ご覧のように、大本のクラスを先に書くトコンパイルエラーになります。
すでに Exception の catch ブロックによって処理されていますというエラーになります。
catchブロックを複数記述することができますが、必ずサブクラス側から記述することを覚えておきましょう。
以上、複雑な例外処理について解説しました。
このサンプルコードをJavaタッチタイプゲームとして遊ぶことができます。