捕获顺序声明?

时间:2012-07-26 10:20:07

标签: java exception exception-handling try-catch

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

8 个答案:

答案 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块放在NullPointerExceptionNumberFormatException catch块之前,则会出现编译时错误。 (无法访问的代码)。

答案 3 :(得分:2)

在切线上,我建议你先考虑一下你是否需要所有这些挡块。您确定要以不同方式为每个案例提供有意义的处理吗?如果您打算打印出一条消息,则只能抓住IOException来执行此操作。

答案 4 :(得分:1)

嗯......从子类开始到超类......这是理想的方式..否则你会得到无法访问的代码错误

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

IOExceptionFileNotFoundException的超类。因此,如果您将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
   }