コードで try catch ブロックを使用します。ここで聞きたいのは、finally ブロックを使用することは良い習慣だということです。コード内の最終ブロックはあまり見たことがありません。それは悪い習慣ですか?
4 に答える
Catch : 何かがうまくいかないとき。
最後に:何かがうまくいかないとき。
最後にブロックは、例外がスローされたかどうかにかかわらず、何かをしたいときに役立ちます。データベース接続を閉じる、リソースを解放するなど。キャッチは例外がスローされたときにのみ実行されるため、キャッチブロックでこれを行うことはできません。
Q: いつ使用しますtry-catch
か?
回答:例外がスローされたときに何かをしたい
Q: いつ使用しますtry-finally
か?
Ans: 例外がスローされてもされなくても、何かをしたい。
Q: いつ使用しますtry-catch-finally
か?
回答: 例外がスローされた場合にのみ x を実行し、例外がスローされたかどうかに関係なく y を実行したい場合。
これを要約すると
try{
//.....
}
catch{
// Something you want to do only when exception is thrown
// Like OMG evil execption RUN RUN
}
finally{
// Something you want to do even the exception is thrown or not
// Like who the hell cares about exception
}
例外を処理する必要があり、エラーが発生した場合にコードを実行する必要がある場合 (通常はクリーンアップ、リソースの破棄) は、確かに良い方法です。
「例外処理のベスト プラクティス」からの引用 ( http://msdn.microsoft.com/en-us/library/seyhszts(v=VS.71).aspx ):
例外を生成する可能性のあるコードの周りに try/finally ブロックを使用し、catch ステートメントを 1 つの場所に集中させます。このように、try ステートメントは例外を生成し、finally ステートメントはリソースをクローズまたは割り当て解除し、catch ステートメントは中央の場所から例外を処理します。
finally を使用することをお勧めします。例外の発生に関係なく実行されます。
プログラムでデータベース操作を行っている場合finally block
は、良い選択です。そこで、ここでfinallyブロックを使って、データベースを自動で閉じます。例えば:
try
{
//code of operation
}
catch(Exception error)
{ //code to handle exception
error.printStackTrace();
}
finally
{ //any code which need to execute mandatory
commit();
db.close();
}
上記の例でtry block
は、DB 接続の開始と、DB の挿入、取得、または更新を処理します。catch block
例外を処理し、finally block
すべての DB 接続を閉じます。