Java - 异常评估

时间:2015-08-26 15:04:52

标签: java exception evaluate

如何评估例外情况?我的意思是:

try{

catch(Exception ex){

   if(ex == IOException){ //Error
       System.out.println("IOException caught: " + ex.toString());
   }

   else if(){

   }
   ....
}

我知道还有其他方法可以实现这一目标。我只是想知道是否可以比较Exception" ex"定义Exception,例如IOException

2 个答案:

答案 0 :(得分:4)

最佳做法是为您需要捕获的每个catch添加不同的Exception语句,以反向类层次结构顺序(从更窄到更宽)。

try {
    // TODO
}
catch(IOException ioe) {
}

catch(Exception e) {
}

否则,您始终可以使用instanceof

catch(Exception ex) {
    if (ex instanceof IOException) {
    }
}

备注

  • 对于Java 7样式的多异常捕获块,后者可能稍微有用一些,例如: catch (IOException | PatternSyntaxException ex)
  • 正如Codebender提到的那样,您可以使用以下习语来匹配确切的类,而不是使用instanceof

    if (ex.getClass().equals(IOException.class))

    instanceof关键字比完全类比较更强大,但可能执行速度较慢。

    例如,new FileNotFoundException() instanceof IOException会返回true,因为FileNotFoundExceptionIOException的子类。

答案 1 :(得分:0)

您可以使用instanceof运算符。但请记住,您将从最具体到最一般的检查。 因为FileNotFoundException也是IOException。

try{
    //do stuff
}catch(Exception ex){
    if(ex instanceof FileNotFoundException){ 
       System.out.println("FileNotFoundException caught: " + ex.toString());
    }else if(ex instanceof IOException){
        System.out.println("IOException caught: " + ex.toString());
    }
}

但是更清洁的解决方案将是

try{
    //do stuff
}catch(IOException ioe){
    //handle IOException
}catch(Exception e){
    //handle Exception
}