2

コードのこれら 3 つの部分に違いはないと思いますね。

   try
    {
       // .............
    }
    catch
    {
        // ............. 
    }

   try
    {
       // .............
    }
    catch(Exception)
    {
       // .............  
    }

try
{
   // .............
}
catch(Exception e)
{
    // ............. 
}

しかし、私は最初のものをいつ使用すべきか、そしていつ - 2番目のものを使用すべきかについて、ほとんど精通しています。しかし、あなたの考えを教えていただきたいです。

4

4 に答える 4

14

最初のものは、例外ではないスローされたオブジェクトもキャッチします。
(これは、CLS に準拠していないコードから発生する可能性があります)

2 つ目は、例外変数を実際に使用しない場合、コンパイラの警告を表示しません。

3 番目のものは、スローされた例外を実際に検査する必要がある場合 (たとえば、ログに記録する場合) にのみ使用してください。

于 2012-09-09T06:16:37.540 に答える
4

これらのコードはかなり異なります。

1 つ目は、発生した例外から情報を取得することを許可しません。何でもキャッチしますが、何がキャッチされたかはわかりません。

2 番目の方法では何もできませんが、少なくともどのような例外を指定するかを指定できます。あなたの例では、 を示したので、 からException派生したものすべてをキャッチしますException。ただし、キャッチされたものを微調整するために変更することはできますが、それでも何もしないことはできます。

3 つ目は、実際に例外にアクセスし、そこから情報を取得できるようにします。

于 2012-09-09T06:16:53.677 に答える
1

3番目のケースは実際にはこれです:

try ブロック内の行で例外が発生すると、対応する例外のオブジェクトが作成されます。含まれている catch ブロック(Exception e)には、実際にはExceptionクラス変数eがパラメーターとして含まれています。次に、例外オブジェクトの参照がこの参照変数にコピーされます。発生した例外のタイプを識別するなど、必要に応じてこの e 変数を使用できるようになりました。たとえばe.message()、例外に関連付けられた説明を提供します。

最初と 2 番目のケースは、Slaks によって非常によく説明されています。

于 2012-09-09T06:25:43.453 に答える
-1

場合によります。最初の2つの違いがわかりません。

catch ブロックで例外を使用する場合、つまり、スタック トレースやその他の情報を取得する場合は、参照するオブジェクトがあるように、最後のものを使用する必要があります。

他の誰かが処理するために例外をスローするだけなら、それは必要ありません。

于 2012-09-09T06:16:25.430 に答える