簡體   English   中英

嘗試......最后......沒有捕獲生成異常

[英]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子句。 幾年前檢查過的例外失敗了。

滿足以下條件時,檢查異常是合理的:

  1. 正確使用API​​無法阻止異常情況
  2. 一旦遇到異常,使用API​​的程序員可以采取一些有用的操作

否則,未經檢查的異常更合適(正如@Stefan Kendall所建議的那樣 )。

不確定我是否關注過你,但最后用於確保在引發異常時執行代碼塊。 如果沒有捕獲,我沒有看到終點的意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM