2012-05-29 51 views
0

我有這樣finally塊來表現不同

String str = null; 

try{ 
    ... 
    str = "condition2"; 
}catch (ApplicationException ae) { 
    str = "condition3"; 
}catch (IllegalStateException ise) { 
    str = "condition3"; 
}catch (Exception e) { 
    str = "condition3"; 
} 

if(str == null){ 
    str = "none"; 
} 

現在我想在一行來總結所有str = "condition3";的條件。終於塊運行永遠不會滿足我的需求。還有什麼可以做的。

+1

你這是什麼意思關鍵字「總結」? –

+2

我不確定你在尋找什麼好處...如果你想讓錯誤字符串對所有3個例外都是相同的,那麼使用下面的答案。如果沒有,並且在我們沒有看到的每個異常塊中都有更多的代碼,那麼我不會看到重複一行很糟糕。 – billjamesdev

+0

這是什麼意思「all str =」condition3「?如果你想總結所有str,它將包含cond2和三個例外中的一個 –

回答

6

從Java 7開始,您可以在單個catch塊中使用catch multiple exception types。該代碼看起來是這樣的:

String str = null; 

try { 
    ... 
    str = "condition2"; 
} catch (ApplicationException|IllegalStateException|Exception ex) { 
    str = "condition3"; 
} 

BTW:你已經發布的代碼,以及我的Java 7的代碼可以全部摺疊成簡單catch (Exception e),因爲ExceptionApplicationExceptionIllegalStateException的超類。

+3

但是這並不是毫無意義,因爲前兩個擴展了'Exception'?只要他這麼做,他就應該抓住Exception。 –

+0

我猜他沒有在那裏顯示所有的代碼,所以像這樣分組他們可能不會起作用。 – billjamesdev

+0

@PaulBellora:是的。但OP的等效Java 6代碼也是如此。我只是在演示語法。不過,我會添加一個關於這個的註釋。 – Asaph

2

您可以使用Java 7異常處理語法。 Java 7在一個catch塊中支持多個異常處理。經驗 -

String str = null; 

try{ 
    ... 
    str = "condition2"; 
}catch (ApplicationException | IllegalStateException | Exception ae) { 
    str = "condition3"; 
} 
+0

我不想分組異常,因爲每個異常將有一個單獨的消息等 –

+0

在這種情況下,你將不得不遵循傳統的try catch塊。嘗試{ ... str =「condition2」; (ApplicationException ae){ } str =「condition3」; (IllegalStateException ise){ str =「condition3」; (例外e){ str =「condition3」; } –

1
try{ 
    ... 
    str = "condition2"; 
}catch (Exception ae) { 
str = "condition3"; 
} 

至於其他都是異常的子類。如果你想顯示不同的信息,那麼可以嘗試如下

try{ 
    ... 
    str = "condition2"; 
}catch(ApplicationException | IllegalStateException e){ 
if(e instanceof ApplicationException) 
    //your specfic message 
    else if(e instanceof IllegalStateException) 
    //your specific message 
    else 
     //your specific message 
    str = "condition3"; 
} 
+0

是的,他們是子類,但我想爲每個子例外打印不同的消息。 –

+1

@imran tariq相應地編輯你的問題 – Maddy

+0

@imrantariq看到我編輯的答案。 –

0

正如你在ApplicationExceptionIllegalStateException catch塊和一般例外Exception catch塊做同樣的事情,那麼你就可以刪除ApplicationExceptionIllegalStateException塊。

0

我要去這裏走出去的肢體,並提供這樣的:

String str = null; 

try{ 
    ... 
    str = "condition2"; 
}catch (Throwable e) { 
    str = "condition3"; 
} 
finally { 
    if(str == null){ 
     str = "none"; 
    } 
} 

如果這不是你所說的「總結」,那麼請澄清是什麼意思。

請仔細閱讀

http://www.tutorialspoint.com/java/java_exceptions.htm http://docs.oracle.com/javase/tutorial/essential/exceptions/

+0

你不覺得應該有一個像catch這樣的塊嗎? –

+0

解釋「catchFinally」 –

+0

catch最後將是一個只會在catch語句後執行的塊。 –

1

您必須添加「最終」,如果您使用的是單catch塊捕獲多個例外的Java 7的功能

catch (final ApplicationException|IllegalStateException|Exception ex) {