在try
-语法中,catch 语句的写入catch
顺序是否重要?FileNotFoundException
IOExceptipon
8 回答
是的,应该先写具体的例外,然后再写更广泛的,
就像你先把房间里的所有动物都叫出来,然后再试着看看外面是否有人
例如
try{
//do something
}catch(Exception ex){
}catch(NullPointerException npe){
}
会给你编译时错误
是的。FileNotFoundException 继承自 IOException。必须首先捕获异常的子类。
必须在一般异常之前捕获特定异常,否则您将收到无法访问的代码错误。例如 -
try{
//do something
}catch(NullPointerException npe){
}catch(NumberFormatException nfe){
}catch(Exception exp){
}
如果将Exception
catch 块放在NullPointerException
or NumberFormatException
catch 块之前,则会出现编译时错误。(无法访问的代码)。
在切线上,我建议您三思而后行,是否首先需要所有这些 catch 块。您确定要为每个案例提供不同的有意义的处理吗?如果你只是要打印一条消息,你只能赶上IOException
去做。
好吧...从子类开始到超类...这是理想的方式..否则您将收到无法访问的代码错误
是的当然。更具体的异常应该写在第一个 catch 块中,一般的异常catch(Exception ex){ex.printStackTrace();}
应该写在最后一组 catch 块中。
如果您尝试其他方式,那么 JVM 编译器将无法访问您的特定异常!
IOException
是 的超类FileNotFoundException
。因此,如果您将catch语句放在 forIOException
之上FileNotFoundException
,那么第二个 catch 的代码将变得无法访问,编译器将error
为此抛出一个。原因很简单:every object of a sub class can be easily accepted by a super class reference
。
IOException 是 FileNotFoundException 的超类。所以首先捕获子类即 FileNotFoundException 然后你需要捕获 IOException
例如,
try{
// something
} catch(FileNotFoundException fne){
// Handle the exception here
} catch(IOException ioe) {
// Handle the IOException here
}