try
{
// throws IOException
}
catch(Exception e)
{
}
catch(IOException e)
{
}
ブロックがtryをスローすると、2 番目のブロックではなく、IOException最初のブロックが呼び出されますcatch。誰でもこれを説明できますか?なぜ最初のcatchブロックを呼び出すのですか?
try-catchから(C# リファレンス) ;
同じ try-catch ステートメントで複数の特定の catch 句を使用することができます。この場合、catch 節は順番に検査されるため、catch 節の順序は重要です。より具体的な例外の前に、より具体的な例外をキャッチします。後続のブロックに到達できないように catch ブロックを並べ替えると、コンパイラはエラーを生成します。
使用する必要があります
try
{
// throws IOException
}
catch(IOException e)
{
}
catch(Exception e)
{
}
Exceptionclass はすべての例外の基本クラスであることに注意してください。
例外クラスは、すべての例外の基本クラスです。したがって、例外がスローされるたびに、最初にキャッチされます最初のキャッチブロックは、任意のタイプの例外をキャッチできます。
IOCExceptionだから前に使ってみてくださいException
ここで IOCException の階層を確認できます
その理由は、 がIOExceptionから派生してExceptionいるため、実際IOExceptionにはException(" is-a ") であり、したがって最初のcatchハンドラーが一致して入力されているためです。
IOException は Exception を継承しています。すべての例外があります。最初に Exception をキャッチすると、すべての例外 (IOException を含む) がキャッチされます。catch(Exception e) がリストの最後のキャッチであることを確認してください。そうしないと、他のすべての例外処理が事実上無視されます。
指定した順序でキャッチされます。あなたの場合、IOException上に置く必要がありExceptionます。常にException最後に保管してください。