2016-03-15 49 views
1

因此,例如在文檔中:java.lang.Integer.parseInt,我注意到代碼首是:爲什麼你不必處理`java.lang`包中的類引發的可能異常?

public static int parseInt(String s) throws NumberFormatException 

然而,當一個人有這樣的聲明:int i = Integer.parseInt(someString);代碼編譯罰款沒有try-catch塊。現在

,在另一方面,如果我寫與標題的方法:

public void connectTo(String ip) throws java.net.HostNotFoundException 

,並給它一個呼叫而不圍繞着一個適當的try-catch塊調用,編譯器是不會有它。我並不是建議我(或任何人)想要將每個呼叫(和其他人)與try-catch塊都包圍起來,但我確定很好奇爲什麼編譯器允許它。

+1

您需要閱讀關於選中和未選中的例外的教程。 –

回答

2

由於NumberFormatException亞類IllegalArgumentException,這反過來又子類RuntimeException

RuntimeException的子類與Exception不同,不需要明確捕獲(雖然它們可以)。

RuntimeException的javadoc頁面:

的RuntimeException及其子類是未經檢查的異常。未經檢查的異常不需要在方法或構造函數的throws子句中聲明,如果它們可以通過執行方法或構造函數來拋出並傳播到方法或構造函數邊界之外。

1

因爲這些異常是unchecked

從附鏈接:

因爲Java編程語言不要求方法 捕捉或指定unchecked異常(RuntimeException的,錯誤和 它們的子類),程序員可能會試圖編寫代碼, 僅拋出未經檢查的異常,或使其所有異常 子類從RuntimeException繼承。這兩個快捷方式 都允許程序員編寫代碼,而不會打擾編譯器錯誤 ,而且不會打擾指定或捕獲任何異常。雖然 這對編程人員來說看起來很方便,但它迴避了捕獲或指定要求的意圖,並可能導致其他人使用您的類的問題 。