簡體   English   中英

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語句。

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

catch(Exception e) {
}

否則,您可以始終使用instanceof

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

筆記

  • 后者在Java 7樣式的多異常catch塊中可能會稍微有用,例如catch (IOException | PatternSyntaxException ex)
  • Codebender所述 ,您可以通過使用以下慣用法來匹配確切的類,而不是使用instanceof

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

    instanceof關鍵字比完全類比較功能強大,但執行速度可能較慢。

    例如, new FileNotFoundException() instanceof IOException返回true ,因為FileNotFoundExceptionIOException的子類。

您可以使用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異常。

希望對您有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM