10

try-语法中,catch 语句的写入catch顺序是否重要?FileNotFoundExceptionIOExceptipon

4

8 回答 8

11

是的,应该先写具体的例外,然后再写更广泛的,

就像你先把房间里的所有动物都叫出来,然后再试着看看外面是否有人

例如

try{
  //do something
}catch(Exception ex){

}catch(NullPointerException npe){

}

会给你编译时错误

于 2012-07-26T10:21:19.010 回答
9

是的。FileNotFoundException 继承自 IOException。必须首先捕获异常的子类。

于 2012-07-26T10:20:48.437 回答
4

必须在一般异常之前捕获特定异常,否则您将收到无法访问的代码错误。例如 -

try{
  //do something
}catch(NullPointerException npe){

}catch(NumberFormatException nfe){

}catch(Exception exp){

}

如果将Exceptioncatch 块放在NullPointerExceptionor NumberFormatExceptioncatch 块之前,则会出现编译时错误。(无法访问的代码)。

于 2012-07-26T10:27:19.577 回答
2

在切线上,我建议您三思而后行,是否首先需要所有这些 catch 块。您确定要为每个案例提供不同的有意义的处理吗?如果你只是要打印一条消息,你只能赶上IOException去做。

于 2012-07-26T10:23:39.683 回答
1

好吧...从子类开始到超类...这是理想的方式..否则您将收到无法访问的代码错误

于 2012-07-26T10:22:00.340 回答
0

是的当然。更具体的异常应该写在第一个 catch 块中,一般的异常catch(Exception ex){ex.printStackTrace();}应该写在最后一组 catch 块中。

如果您尝试其他方式,那么 JVM 编译器将无法访问您的特定异常!

于 2012-07-26T10:24:23.530 回答
0

IOException是 的超类FileNotFoundException。因此,如果您将catch语句放在 forIOException之上FileNotFoundException,那么第二个 catch 的代码将变得无法访问,编译器将error为此抛出一个。原因很简单:every object of a sub class can be easily accepted by a super class reference

于 2012-07-26T10:24:47.783 回答
0

IOException 是 FileNotFoundException 的超类。所以首先捕获子类即 FileNotFoundException 然后你需要捕获 IOException

例如,

try{
      // something
   } catch(FileNotFoundException fne){
      // Handle the exception here
   } catch(IOException ioe) {
      // Handle the IOException here
   }
于 2015-04-09T10:44:03.267 回答