2017-02-17 14 views
1

是否有任何情況(實際上),在catch塊中拋出Exception是有用的?是否有任何情況(在實踐中),在catch塊中拋出Exception是有用的?

例如

} catch (Exception e) { 
    String msg = "ErrorExample"; 
    log.error(msg); 
    throw new RuntimeException(msg, e); 
} 
+3

這要看,只是重新拋出'Exception'作爲'RuntimeException'擺脫檢查的異常是在我看來,一個代碼味道的一個位。 –

+0

您遇到的異常是您的實現必須處理的異常。您拋出的異常是您暴露給方法用戶的例外情況。然後投擲是一種處理不同事物的方法。 – khelwood

回答

2

當你跟蹤一些錯誤事情,只是回覆有例外。只有你記得的是,拋出適當的例外。這是絕對正常的。

對於前:

try { 

    // receive user age as input 
    // try to parse user input to integer 

} catch (Exception e) { 

    throw new IllegalArgumentException("Please enter valid integer value", e); 
} 
+0

非常感謝! –

+0

@ИльяБелейчев不客氣。 –

+0

如果還有其他異常,則可能會導致誤導性錯誤消息。 – ayahuasca

3

包裝檢查異常到運行時異常的這種特殊的技巧是有用的,當你必須實現一個缺乏throws聲明,你想拋出異常的接口方法。通過將真正的異常包裝到RuntimeException中,您可以有效地繞過檢查異常的機制,這可能是唯一可用的事情 - 例如,當您無法控制正在實施的接口時。

這是不是你應該定期做,但是,因爲它呈現的checked異常有效無用。如果你必須採用這種方式,拋出一個更具體的自定義運行時異常是一個更好的選擇,因爲你的代碼變得更加明確你爲什麼要進行包裝。

+2

即使如此,我認爲一個更具體的(運行時)異常會比將它包裝在'RuntimeException'中更好。 –

+0

@MarkRotteveel好點,非常感謝! – dasblinkenlight

0

還有,你需要預見並創建例外來處理他們,他們應該會出現很多不可預見的情況。例如你想要一個使用上傳照片的註冊表格,然後他們上傳一個文字文件或另一個文件不是圖像文件。

捕捉和處理異常是由遠見引導,可能會出現不利的不測,你適當規劃如何以往任何時候都做之前,所以它不磚您的應用程序處理。這僅僅是在許多方面是滄海一粟,在一個catch塊拋出的異常是有用

0

很多框架和包包裹內部異常用自己的異常類。這是內在的例外。是否使用checked或unchecked異常是一個無關的設計決定,關於這個主題有各種不同的看法,例如[java checked vs unchecked exception explanation]。 1

相關問題