在try
- catch
语法中,编写FileNotFoundException
和IOExceptipon
的catch语句的顺序是否重要?
答案 0 :(得分:10)
是的,应该首先编写特定的例外,之后更广泛,
就像你先在房间里召唤所有的动物一样,在你试图看看外面是否有人之后
例如
try{
//do something
}catch(Exception ex){
}catch(NullPointerException npe){
}
会给你编译时错误
答案 1 :(得分:8)
是。 FileNotFoundException继承自IOException。必须首先捕获异常的子类。
答案 2 :(得分:4)
必须在一般异常之前捕获特定异常,否则您将收到无法访问的代码错误。 例如 -
try{
//do something
}catch(NullPointerException npe){
}catch(NumberFormatException nfe){
}catch(Exception exp){
}
如果将Exception
catch块放在NullPointerException
或NumberFormatException
catch块之前,则会出现编译时错误。 (无法访问的代码)。
答案 3 :(得分:2)
在切线上,我建议你先考虑一下你是否需要所有这些挡块。您确定要以不同方式为每个案例提供有意义的处理吗?如果您打算打印出一条消息,则只能抓住IOException
来执行此操作。
答案 4 :(得分:1)
嗯......从子类开始到超类......这是理想的方式..否则你会得到无法访问的代码错误
答案 5 :(得分:0)
是的当然。应该在第一个catch块中写入更具体的异常,并且应该在最后一组catch块中写入catch(Exception ex){ex.printStackTrace();}
等通用异常。
如果您尝试其他方式,JVM编译器将无法访问您的特定异常!
答案 6 :(得分:0)
IOException
是FileNotFoundException
的超类。因此,如果您将IOException
的 catch 语句置于FileNotFoundException
之上,那么第二个catch的代码将无法访问,编译器将抛出error
为了那个原因。原因很简单:every object of a sub class can be easily accepted by a super class reference
。
答案 7 :(得分:0)
IOException是FileNotFoundException的超类。所以先抓住子类,即FileNotFoundException,然后你需要捕获IOException
例如,
try{
// something
} catch(FileNotFoundException fne){
// Handle the exception here
} catch(IOException ioe) {
// Handle the IOException here
}