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タッチタイプゲームとして遊ぶことができます。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。