2016-09-17 68 views
0

假設我們正在談論的所有擴展Exception基類的異常,多個catch塊VS在基本異常類捕獲

是:

try { 
some code;      
} catch (InterruptedException e) { 
    e.printStackTrace(); 
    } catch (ExecutionException e) { 
    e.printStackTrace(); 
    } 
catch (MyOwnException e) 
{ 
    e.printStackTrace(); 
} 

一樣:

try { 
    some code; 
    } 
catch (Exception e) { 
    e.printStackTrace(); 
    } 

我我想知道在哪種情況下我必須使用前者?

+0

在第二個選項中,Exception類的子類異常將無法訪問,並且您將得到Code Not Reachable編譯錯誤 – harshavmb

回答

2

在第二個選項Exception將捕獲所有的異常,而不是在第一個選項只有那些明確列出。
如果您只想捕獲選定的例外情況並對每個例外做出不同的響應,請使用第1個選項。
如果你想趕上只選擇了異常,並有所有這些相同的響應,你可以使用:

catch (InterruptedException | ExecutionException | MyOwnException e) 
{ 
    e.printStackTrace(); 
} 
+0

這個答案很有意義。如果我想對每種類型的異常做出不同的反應,那麼我需要做第一個選項。謝謝。 – nitinsh99

1

如果您有哪方面都是從延伸的多個例外......我們會說IndexOutOfBoundsException ,除非你特別想打印StringIndexOutOfBoundsException或另一個子類的不同信息,你應該看到IndexOutOfBoundsException。 。如果您有從Exception類擴展多個異常另一方面,它是創造至少在JDK 1.8的多catch語句正確的格式:

try { 
    // Stuff 
}catch(InterruptedException | ClassNotFoundException | IOException ex) { 
    ex.printStackTrace(); 
} 

在其中創建多個catch語句,前者是,如果你試圖做我之前說過的話。

try { 
    // Stuff 
}catch(StringIndexOutOfBoundsException se) { 
    System.err.println("String index out of bounds!"); 
}catch(ArrayIndexOutOfBoundsException ae) { 
    System.err.println("Array index out of bounds!"); 
}catch(IndexOutOfBoundsException e) { 
    System.err.println("Index out of bounds!"); 
} 
+0

豎起大拇指爲全面解答+1 – c0der