• 締切済み

finally ってどのようなときにつかうんですか?

処理A try 処理B catch 処理C finally 処理D ---------------------- 処理A try 処理B catch 処理C 処理D ---------------------- 以上2種類 どのみち 処理Dはとおりますよね? いったいどのような場合使うのでしょうか? 言葉で書くのが難しいのならソースでも構いません・・。 (言語はできたら VBかC#)

みんなの回答

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.3

2種類の処理で、例外発生時の処理の順序は以下のようになるはずです。 1つ目の例  処理A→処理B→例外発生→処理D→処理C 2つ目の例  処理A→処理B→例外発生→処理C→処理D 処理Dは正常時も例外時も実行されますが、処理Dの後は正常時と例外時で普通は違うことをする必要があるはずです。(例外時はエラーを表示してreturnとか) その場合、2つ目の例では、処理Dの後に例外があったかどうかを自分で再度判定する必要がありますが、1つ目の例ではその処理を単純に処理Cで行えます。 正常時でも異常時でも単にreturnして終わりの様な関数ならたいした違いはないかもしれません。

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

基本的には、finallyには例外が発生しようがしまいが必ず実行するコードを書きます。なぜ単純に try-catch の後ろにコードを書くだけではいけないか、次の二つの例を比べてみてください。"Finish"という文字列が出力されるのはどちらでしょうか? 例1 try { throw new SystemException(); } catch (ApplicationException) { Console.WriteLine("Error"); } finally { Console.WriteLine("Finish"); } 例2 try { throw new SystemException(); } catch (ApplicationException) { Console.WriteLine("Error"); } Console.WriteLine("Finish"); (SystemException は catch (ApplicationException) ではキャッチできません。)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

finallyには、tryで実行された部分の後処理などを書きます。 例えばエラーが起こったために、ファイルのクローズがされていないような流れになるような場合にクローズ処理をするとか作りかけとか途中まで作った物の整合性をとるとかそういうことをします。 この処理は、tryの中で処理される(された)処理と関係があるので、単純に処理Dでいつも実行すればよいというものではありません。(もちろん、いつも処理Dを実行すればいいという場合もあります)

関連するQ&A