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)
{
}
Exception
class はすべての例外の基本クラスであることに注意してください。
例外クラスは、すべての例外の基本クラスです。したがって、例外がスローされるたびに、最初にキャッチされます最初のキャッチブロックは、任意のタイプの例外をキャッチできます。
IOCException
だから前に使ってみてくださいException
ここで IOCException の階層を確認できます
その理由は、 がIOException
から派生してException
いるため、実際IOException
にはException
(" is-a ") であり、したがって最初のcatch
ハンドラーが一致して入力されているためです。
IOException は Exception を継承しています。すべての例外があります。最初に Exception をキャッチすると、すべての例外 (IOException を含む) がキャッチされます。catch(Exception e) がリストの最後のキャッチであることを確認してください。そうしないと、他のすべての例外処理が事実上無視されます。
指定した順序でキャッチされます。あなたの場合、IOException
上に置く必要がありException
ます。常にException
最後に保管してください。