2013-10-04 50 views
3

我想知道爲什麼IllegalArgumentException類不需要需要被捕獲或聲明,而其他例外必須(例如java.net.MalformedURLException)。爲什麼沒有必要捕捉IllegalArgumentException?

public void foo() { 
    throw new IllegalArgumentException("spam"); 
} 

public void bar() throws MalformedURLException { // required 
    throw new MalformedURLException("ham"); 
} 

我知道Error都不具備的中聲明,因爲它們不打算逮住。

我想聲明一個新的異常,也不需要捕捉。

回答

4

Java中有兩種類型的異常:檢查異常未經檢查的異常。檢查異常必須被捕獲或聲明爲拋出(如MalfomedURLException),但捕獲未檢查的異常(如IllegalArgumentException)不是強制性的,您可以讓調用者捕獲它們(或將它們拋給它的調用者)。

欲瞭解更多信息,看看這個帖子:

Java: Checked vs Unchecked Exceptions Explanation

如果你繼承RuntimeException您的自定義異常類或繼承它的任何異常類,然後捕捉你的異常不會是強制性的。

1

IllegalArgumentException是未經檢查的異常,所以如果你沒有捕獲它,那麼它將由JVM處理,這些異常是RuntimeException,Error的子類,而MalformedURLException是檢查異常,必須由程序員捕獲異常。檢查到所有IOException異常Read here for more info