6
try
{
    // throws IOException
}
catch(Exception e)
{
}
catch(IOException e)
{
}

ブロックがtryをスローすると、2 番目のブロックではなく、IOException最初のブロックが呼び出されますcatch。誰でもこれを説明できますか?なぜ最初のcatchブロックを呼び出すのですか?

4

5 に答える 5

14

try-catchから(C# リファレンス) ;

同じ try-catch ステートメントで複数の特定の catch 句を使用することができます。この場合、catch 節は順番に検査されるため、catch 節の順序は重要です。より具体的な例外の前に、より具体的な例外をキャッチします。後続のブロックに到達できないように catch ブロックを並べ替えると、コンパイラはエラーを生成します。

使用する必要があります

try
{
    // throws IOException
}
catch(IOException e)
{
}
catch(Exception e)
{
}

Exceptionclass はすべての例外の基本クラスであることに注意してください。

于 2013-03-25T07:22:37.563 に答える
2

例外クラスは、すべての例外の基本クラスです。したがって、例外がスローされるたびに、最初にキャッチされます最初のキャッチブロックは、任意のタイプの例外をキャッチできます。

IOCExceptionだから前に使ってみてくださいException

ここで IOCException の階層を確認できます

于 2013-03-25T07:24:27.313 に答える
0

その理由は、 がIOExceptionから派生してExceptionいるため、実際IOExceptionException(" is-a ") であり、したがって最初のcatchハンドラーが一致して入力されているためです。

于 2013-03-25T07:22:22.063 に答える
0

IOException は Exception を継承しています。すべての例外があります。最初に Exception をキャッチすると、すべての例外 (IOException を含む) がキャッチされます。catch(Exception e) がリストの最後のキャッチであることを確認してください。そうしないと、他のすべての例外処理が事実上無視されます。

于 2013-03-25T07:22:46.493 に答える
0

指定した順序でキャッチされます。あなたの場合、IOException上に置く必要がありExceptionます。常にException最後に保管してください。

于 2013-03-25T07:20:10.757 に答える