「ハンドル例外」部分が例外自体をスローすると、クリーンアップは発生しません。
さらに重要なことに、あなたはほとんどである必要がありますすべて例外をキャッチします。処理できる非常に特殊な例外をキャッチし、他の例外をバブルアップさせる必要があります。その時点で、はでなければなりません。ブロックがまだ発生している場合は、finally
ブロックを使用してください。
あなたはどの言語を使用しているのかはっきりしませんが、Javaの場合は例外ではない例外(Throwableの他のサブクラス)が最初のバージョンではなく、一般的にはException
を捕まえるべきではありません。
個人的に私はtry/catchやtry/catch/finallyブロックよりtry/finallyブロックを多く書くことがわかります。私は非常に珍しい私は本当にの取引を処理することができます...私は時には私が取り組んでいる抽象レベルのために適切なものに変換するために1つの例外をキャッチし、その後再転覆。
EDIT:ジ・アキールの答えで述べたようにブロックは、例えば、例外なくを完了した場合、finally
文も実行されていますreturn
ステートメントを介して。私がそれを忘れてしまったという事実は、finally
に有利な理由です:一貫性を促進します。ブロックがどのように終了するかにかかわらず、クリーンアップを実行するための一貫した場所です。
また、C#では、使い捨てリソースにusing
ステートメントをイディオムで使用することにも注意してください。 Java 7にはtry-with-resourcesというステートメントがあります。
@Greco:なぜC#タグを追加しましたか? –