[英]Try…finally…without catch generating an exception
這是一個非常愚蠢的問題,但我想知道一些事情。 我有一個變量,我必須填寫一個Integer
。 在某些情況下,我從中獲取數據的源可能返回空字符串或只是離線。 我不必處理離線情況,因為如果它離線的源,程序永遠不會到這么遠。 所以我想做這樣的事情:
int i = 0;
try {
i = mySource.getInt();
}
finally {
System.out.println(i);
}
int i = 0
是我的基值,所以如果我必須解析空字符串,我將只使用初始值。 在這種情況下,我們將生成一個異常,它不會被捕獲。 有沒有辦法在不處理異常的情況下做這樣的事情(所以不使用catch(Exception e){}
)或者它只是不好的做法?
只是為了澄清:我現在不需要檢查源是否在線,因為它是一個已解析的xml文件,因此我在下載文件時會檢查它是否處於脫機狀態。
如果您沒有捕獲它,則會傳播該異常。 既然你知道是什么導致了異常,你就不希望控制流被中斷,而你只想要默認值,傳播異常沒有任何好處。 抓住它然后吃它,然后使用默認值。
使用try ... finally
沒有捕獲的時間是你需要清理的東西(通常需要關閉的資源),但你不想處理任何可能被拋出的異常,你想讓他們走了。 這是相反的情況,你沒有任何需要關閉的東西,你只想壓制異常並使用默認值。
如果你控制getInt()
,讓它拋出未經檢查的異常並刪除throws
子句。 幾年前檢查過的例外失敗了。
滿足以下條件時,檢查異常是合理的:
否則,未經檢查的異常更合適(正如@Stefan Kendall所建議的那樣 )。
不確定我是否關注過你,但最后用於確保在引發異常時執行代碼塊。 如果沒有捕獲,我沒有看到終點的意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.