当尝试处理异常时,顺序catch块
本文关键字:顺序 catch 异常 处理 | 更新日期: 2023-09-27 18:05:33
try
{
// throws IOException
}
catch(Exception e)
{
}
catch(IOException e)
{
}
当try
块抛出IOException
时,它将调用第一个catch
块,而不是第二个CC_3块。有人能解释一下吗?为什么调用第一个catch
块?
与 try - catch (c#引用),
可以在同一个语句中使用多个特定的catch子句try - catch语句。在本例中,catch子句的顺序是重要是因为catch子句是按顺序检查的。赶上的更具体的异常在不太具体的异常之前。编译器如果对捕获块进行排序以使后面的块
你应该使用
try
{
// throws IOException
}
catch(IOException e)
{
}
catch(Exception e)
{
}
注意,Exception
类是所有异常的基类。
Exception类是所有异常的基类。因此,无论何时抛出任何类型的异常,它都将首先被第一个catch块捕获,该catch块可以捕获任何类型的异常。
所以试着在Exception
之前使用IOCException
你可以在这里看到IOCException的层次结构
它们按照您指定的顺序被捕获。在您的情况下,您应该将IOException
放在Exception
之上。
原因是IOException
派生自Exception
,因此IOException
实际上是和Exception
("is-a"),因此第一个catch
处理程序匹配并被输入。
IOException继承自Exception。所有例外都是这样。当你首先捕获Exception时,你将捕获所有异常(包括IOException)。确保你的catch(Exception e)是列表中的最后一个catch,否则所有其他异常处理将被有效地忽略。