try
{
// throws IOException
}
catch(Exception e)
{
}
catch(IOException e)
{
}
当try
块抛出IOException
时,它将调用第一个catch
块而不是第二个块。任何人都可以解释这一点。为什么它会先调用catch
阻止?
答案 0 :(得分:8)
可以在同一个中使用多个特定的catch子句 try-catch语句。在这种情况下,catch子句的顺序是 很重要,因为捕获条款是按顺序检查的。 赶上 在不太具体的例外之前的更具体的例外。编译器 如果您订购了catch块以便稍后阻塞,则会产生错误 永远无法联系到。
你应该使用
try
{
// throws IOException
}
catch(IOException e)
{
}
catch(Exception e)
{
}
请注意,Exception
class是所有异常的基类。
答案 1 :(得分:1)
异常类是所有异常的基类。因此,每当抛出任何类型的异常时,它将首先被第一个可以捕获任何类型的异常的catch块捕获。
因此,请尝试在IOCException
Exception
您可以看到IOCException here
的层次结构答案 2 :(得分:0)
按照您指定的顺序捕获它们。在您的情况下,您应将IOException
置于Exception
之上。始终保持Exception
为最后一次。
答案 3 :(得分:0)
原因是IOException
来自Exception
,因此IOException
实际上 是Exception
(“is-a”)因此第一个catch
处理程序匹配并正在输入。
答案 4 :(得分:0)
IOException继承自Exception。所有例外都有。首先捕获Exception时,将捕获所有异常(包括IOException)。确保catch(Exception e)是列表中的最后一个catch,否则将有效地忽略所有其他异常处理。