Java - 异常评估

Java - Exception evaluating

如何评估异常?我的意思是:

try{

catch(Exception ex){

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

   else if(){

   }
   ....
}

我知道还有其他方法可以实现这一点。我只想知道是否可以将 Exception "ex" 与定义的 Exception 进行比较,例如 IOException.

最佳做法是为您需要捕获的每个 Exception 添加不同的 catch 语句,按照倒置的 class 层次结构顺序(从窄到宽)。

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

catch(Exception e) {
}

否则,您始终可以使用 instanceof

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

备注

  • 后者对于 Java 7 样式的 multiple-exception catch 块可能稍微有用一些,例如catch (IOException | PatternSyntaxException ex).
  • 正如 Codebender 提到的,您可以通过使用以下成语来匹配确切的 class 而不是使用 instanceof

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

    instanceof 关键字比精确 class 比较更强大,但执行速度可能较慢。

    例如,new FileNotFoundException() instanceof IOException returns true,因为 FileNotFoundExceptionIOException 的 child class。

您可以使用 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
}

您可以执行多个 catch 语句:

try
{
   //code
}catch(IOException e)
{
   //Code
}
catch (NoSuchFieldException e) {
    //Code
}
....

另外,你也可以这样做:

try { 
  //Code
} catch( IOException | NoSuchFieldException ex ) { 
  //Code
}

如果您想使用具有多个 catch 异常的相同代码。

希望对您有所帮助!