私は何年もの間、多くの言語でtry-catch/exception-finallyバリアントを使用してきましたが、今日、誰かが最終的に何を意味するのかと尋ねてきましたが、答えることができませんでした。
基本的に、try-catchブロック全体の後にステートメントを配置するのではなく、最終的にステートメントを配置するのはなぜですか?つまり、次のコードブロックには違いがあります。
try{ //a}
catch {//b}
finally {//c}
try{//a}
catch{//b}
//c
編集:
人々、私は最終的に何をするかを知っています、私はそれを何年もの間使用しています、しかし私の質問は上記の例で//c
ついに冗長に見えますね?
finally
ブロックの目的は、「catch」ブロックだけではあまりきれいに処理されない3つの状況でコードが実行されるようにすることです。
finally
コードをすべてのreturn
またはスローの前にコピーし、catch
ブロックを独自のtry/catch内にラップして、偶発的な例外が発生する可能性を考慮できますが、それをすべて忘れて、単にfinally
ブロックを使用する方がはるかに簡単です。
ところで、言語設計者に含めてほしいことの1つは、例外の後でクリーンアップする必要があるが、それでも浸透させたい場合に対処するために、exception
ブロックへのfinally
引数です。コールスタックをアップします(たとえば、コンストラクターのコードをそのようなコンストラクトでラップし、コンストラクターが例外で終了する場合は、構築中のオブジェクトをDispose
することができます)。
最後に、tryブロックで例外がスローされた場合でもブロックが実行されます。したがって、たとえば、以前にストリームを開いた場合、例外がスローされるかどうかに関係なく、そのストリームを閉じることができます。最後に、ブロックはそのような問題に役立ちます。
Finally
例外が発生した場合でも、コードが実行されるようにしてください。
finallyブロックは、tryブロックに割り当てられたリソースをクリーンアップしたり、例外が発生した場合でも実行する必要のあるコードを実行したりするのに役立ちます
http://msdn.Microsoft.com/en-us/library/zwc8s4fz(v = vs.80).aspx