2

重複の可能性:
TryでFinallyを使用する理由…Catch

コードをクリーンアップするためにcatchブロックを使用すべきではないのはなぜですか?

私はエラー処理技術をあまり使用していませんが、今ではほぼすべてのプログラムでそれらを使用し始めています。良い頃

それで、記事/ドキュメントを調べている間、私はついにブロックに出くわしました。

そして、それが示唆するように、finallyブロックは、例外があるかどうかに関係なく実行されます(もちろん、JVMまたはPCの強制シャットダウンがある場合は実行されません)。また、最後にブロックは通常、コード(リソース)のクリーンアップに使用されます。

したがって、基本的に、コードに例外が発生していない場合、なぜコードをクリーンアップする必要があるのでしょうか。クリーンアップコードをfinallyブロックではなくcatchブロックに配置するべきではありません。

似たような質問を探してみましたが、誰もこの質問をしなかったようです。だから私は先に進んで質問を作成しました:D

4

2 に答える 2

7

catchブロックの実行が保証されていないためですfinally電源コードを壁から蹴り出さない限り、ブロックにはそのような保証があります 。

于 2012-10-30T23:30:26.723 に答える
1

@RobertHarveyが指摘したように、catchブロックの実行は保証されていないfinallyため、このような種類のコードを使用してコードを明確にすることは避けてください。

    try
    {
        // do something
    }
    catch(Exception e)
    {
        // error handling
        // clean up
    }
    // clean up

あなたがこのようにすることができるように:

    try
    {
        // do something        
    }
    catch(Exception e)
    {
        // error handling
    }
    finally
    {
        // clean up
    }

このブロックは、最初のコードを実行したい場合、つまり、例外が発生したかどうかに関係なくクリーンアップ(たとえば、ファイルを閉じる)したい場合、エラーが発生した場合にクリーンfinallyアップしたい場合に役立ちます。CANキャッチブロックでアップ。

于 2012-10-31T00:16:20.293 に答える