[英]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) {
}
}
筆記
catch (IOException | PatternSyntaxException ex)
。 如Codebender所述 ,您可以通過使用以下慣用法來匹配確切的類,而不是使用instanceof
:
if (ex.getClass().equals(IOException.class))
。
instanceof
關鍵字比完全類比較功能強大,但執行速度可能較慢。
例如, new FileNotFoundException() instanceof IOException
返回true
,因為FileNotFoundException
是IOException
的子類。
您可以使用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.