try
{
// throws IOException
}
catch(Exception e)
{
}
catch(IOException e)
{
}
when try
block throws IOException
, it will call the first catch
block, not the second one. Can anyone explain this? Why does it call the first catch
block?
From try-catch (C# Reference) ;
It is possible to use more than one specific catch clause in the same try-catch statement. In this case, the order of the catch clauses is important because the catch clauses are examined in order. Catch the more specific exceptions before the less specific ones. The compiler produces an error if you order your catch blocks so that a later block can never be reached.
You should use
try
{
// throws IOException
}
catch(IOException e)
{
}
catch(Exception e)
{
}
Be aware, Exception
class is the base class for all exceptions.
Exception class is the base class of all exceptions. So whenever exception is of any type is thrown it will first will be caught by the first catch block which can catch any type of Exception.
So try using IOCException
before the Exception
You can see the hierarchy of IOCException here
They are catched in the order you specify. In your case you should put IOException
above Exception
. Always keep Exception
as last.
原因是IOException
派生自Exception
,所以IOException
实际上是一个Exception
(" is-a "),因此第一个catch
处理程序匹配并被输入。
IOException inherits from Exception. All Exceptions do. When you catch Exception first, you will catch all exceptions (including IOException). Make sure that your catch(Exception e) is the last catch in the list otherwise all other exception handling will be effectively ignored.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.