1

メソッドに例外をかわす (つまり、例外を伝播させる) か、例外を受け取った後にそれを処理するかを決定する際に、どのガイドラインを使用しますか?

ここに私が尋ねようとしているものの例があります

method1、2、3、および 3 の 3 つのメソッドがある場合、Method1 は Method3 を呼び出す Method2 を呼び出します。そして、例外は、次のように例外を上方に伝播させる必要がある場合にのみメソッド3でスローされます(疑似Javaを許してください;))

   method1 {
        try {
            call method2;
        } catch (exception e) {
            doErrorProcessing;
        }
    }

    method2 throws exception {
        call method3;
    }

    method3 throws exception {
        call readFile;
    }

そして、次のように例外が発生したら、いつ例外を処理する必要がありますか

   method1 {
        call method2;
    }

    method2 {
        call method3;
    }

    method3 {
        try {
            call readFille
        } catch (exception e) {
            doErrorProcessing;
        }
    }
4

5 に答える 5

7

私が従うルール:

例外を修正できる場合、またはその原因となった問題を無効にすることができる場合 (これは、例外を完全に無視することを意味する場合もあります)、それを処理します。それ以外の場合は、次のレベルに渡されます。

そして、私は常に例外をツリーのできるだけ下位 (つまり、発生後できるだけ早く) に修正するようにしています。これにより、例外処理がローカライズされ、上位レベルでの大きなホンキン例外ハンドラーが回避されます。

于 2008-12-12T01:38:09.473 に答える
1

ソフトウェアのすべての答えと同様に、これは私にとって「それは依存する」です。

実際、ほとんどの例外は例外的なものであるべきなので、一般的に、例外が発生したときにアプリを壊してしまう傾向があります。例外が回復可能なエラー状態を表している場合は、安全に処理するために必要な情報が得られたときに、コール スタック内のポイントで処理する必要があります。これには、ユーザーがエラーを修正できる状況が含まれます。つまり、例外をキャッチしてユーザーに報告し、ユーザーが適切なアクションを実行できるようにします。

于 2008-12-12T01:37:18.273 に答える
0

下位レベルのルーチンが例外条件に対して何をすべきかを知っている場合は、おそらくそれを処理する必要があります。関数が実行しようとしているタスクとは関係のない例外的な状態である場合は、より高いレベルで処理できるようにする方がおそらく理にかなっています。

于 2008-12-12T01:36:44.920 に答える
0

処理できる例外のみをキャッチします。他のすべてを通り過ぎさせてください。

于 2008-12-12T01:38:55.667 に答える
-1

Java の観点からは、私は常に未チェックの例外を使用して、メソッド シグネチャに throws 宣言を追加しないようにしています。

次に、実際に例外をキャッチする場所は状況によって異なります。例外が適用される場合は、常にチェーンのできるだけ高い位置で例外を処理したいと考えています。また、アプリケーションが失敗することが予想されるシステム レベルの例外である場合は、"すべてをキャッチ" する例外処理メカニズムを使用できます。

于 2008-12-12T01:42:37.157 に答える