2014-11-21 24 views
2

- 案例1和2的效果相同,爲什麼需要在方法簽名中添加異常聲明?在方法簽名中解釋「拋出異常」的效果是什麼


//情況1

public void doSomething() throws Exception { 
     //do Something 
    }  
public void Caller() { 
    try { 
    doSomething(); 
    } catch (Exception e) { 
    //handle the exception 
    } 
} 

//情況下2

public void doSomething() { 
     //do Something 
    }  
public void Caller() { 
    try { 
    doSomething(); 
    } catch (Exception e) { 
    //handle the exception 
    } 
} 

參考: what is the use of throws Exception

回答

0

在這種情況下,除了您提醒編譯器出現一個您不打算拋出的異常外,沒有區別。

抓到拋出的「異常」也是一個壞主意 - 在這兩種情況下,您都希望處理具有特定含義的特定異常。當你捕捉時,使用try塊的唯一理由是如果你期待一個特定的異常,所以你應該抓住那個。這樣,如果出現一些意外的異常,您不會嘗試以錯誤的方式處理它。 (相反,你的程序失敗了,而且你知道有一個條件你必須處理)當你拋出時,你想拋出一個特定的異常,不論是你構成的還是具有已知含義的標準異常,調用函數知道要處理什麼。例如,如果您的doSomething可能會拋出一個ArrayIndexNotFoundException,如果這些小部件未被修改,您可能需要捕獲ArrayIndexNotFoundException並拋出WidgetNotFrobnicatedException。任何時候你拋出一個異常,你的javadoc應該確切地指定什麼情況會觸發這個問題,所以你的代碼的用戶有機會解決這個可能的失敗。

(有一種情況我可以看到捕捉異常,這就是說,如果你想淡出某些優雅的停頓,如果事情意外出錯 - 在這種情況下,在你的catch塊你會記錄這個問題,一個開發人員,並拋出某種「對不起,錯誤號3542發生,請重新啓動程序」的消息。)

+0

你的答案是明確的,還提供有用的信息和建議,而不是我的問題,非常感謝! – kevin 2014-11-22 17:40:31

0

除非是要立即處理該方法異常,最好使用throws [specific Exception]這樣的外在因素在代碼中可以進一步處理。

有一個普通的Throwable捕捉在頂部的「優雅地崩潰」,以防出現問題時有點常見。

+0

這不是用好的做法一個'拋出Exception'以往,原因很簡單,這混淆了什麼異常實際上可以拋出的力量*所有的*來電者有一個過於籠統'抓(例外e)'或傳播l使用它自己的'拋出異常'清晰度。除非你的意思是他們應該使用'throws [一些特定的例外]'? – jpmc26 2014-11-21 19:26:57

+0

是的,我的意思是拋出一些特定的異常,因此可以在調用堆棧中處理更高的值。 – 2014-11-21 19:34:26

+0

如果您在答案中澄清說明,我將刪除downvote。 (我不能刪除它,直到你編輯。) – jpmc26 2014-11-21 19:56:14

0

如果您的doSomething方法,有機會拋出異常,而且您不想捕獲它,你應該添加這個拋出異常的方法。

2

throws聲明用於聲明您的方法拋出哪個checked exceptions

舉例來說,如果我寫這樣的代碼:

public void doSomething() throws SQLException { 
} 

調用此方法必須有一個try/catch塊爲SQLExceptionException,或Throwable任何代碼......或者也可以擁有自己throws聲明的那些3.

相關問題