• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:try catchについて)

try catchについて

このQ&Aのポイント
  • try catchについての質問です。内側でスローされた例外は、外側でcatchされるのでしょうか?
  • また、内側でcatchをしなかった場合、外側でcatchされるのでしょうか?
  • 質問者はtry catchの動作について知りたいとのことです。

質問者が選んだベストアンサー

  • ベストアンサー
  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.1

try ... catch文はそのブロック内で発生した例外をcatchします。 質問にある例で言えば、ストリーム1を使った処理で例外が発生すれば内側のtry ... catch文でcatchされます。 ただし内側のcatch文で "throw e;" としているのでこの例外を処理するハンドラを探しに行く(あまりいい表現ではありませんが…)ことになります。 その例外ハンドラが外側のtry ... catch文になります。 > 内側でスローされた例外は、外側でcatchされるのですか? > また、内側でcatchをしなかった場合、外側でcatchされるのですか? 内側でthrowされた例外は内側でcatchします。 ただし内側のcatch文でそのまま例外を投げているので、それを外側でcatchします。 理屈より実践。 下記のソースコードを動かしてみれば分かりますよ。 ---------- try { try { reader = new FileReader(new File("")); // FileNotFoundExceptionが発生 } catch (Exception e) { System.out.println("内側のtry-catch: " + e.getMessage()); throw e; } finally { System.out.println("内側のtry-catch: Finally 1"); } } catch (Exception e) { System.out.println("外側のtry-catch: " + e.getMessage()); } finally { System.out.println("外側のtry-catch: Finally 2"); } ---------- ただし個人的な意見ですが、処理上必要な場合以外はtry ... catch文のネストはオススメしません。 質問にある例も try { //ストリーム1を使った処理 //ストリーム2を使った処理 } catch (IOException e) { throw new hogeException(); } finally { //ストリーム1のクローズ //ストリーム2のクローズ } とした方がいいです。

k_u_m_a_
質問者

お礼

回答ありがとうございました。 実行環境がある所で実践してみました。 理屈では、おそらくそうなるのだろうなぁというのは、 感じてたんですが、実践してみて納得です。 ありがとうございました。

関連するQ&A