2011-07-12 201 views
2

我不記得這是如何工作的。如果我有一個拋出異常的方法,我可以在方法中處理它,或者聲明該方法拋出異常。當我在可能拋出異常的方法中有一個方法時會發生什麼,但沒有明確聲明它可能會發生?Java異常處理

例如:

public void A() throws Exception 
{ 
    B(); 
} 

public void B() 
{ 
    //Some code in here may cause an exception. 
} 

當方法 「B」 導致異常會發生什麼?程序崩潰了嗎? 「B」應該在方法聲明中聲明「拋出異常」嗎?

+4

你試過了嗎?測試它可能只需2分鐘,並知道結果。 –

+0

正如@Harry提到的先試一下..它會給你更多的理解,而不是在閱讀答案時..之後,如果你不清楚,然後張貼問題.. – raksja

回答

1

這一切歸結爲檢查異常與未檢查異常。

未檢查異常是RuntimeException的子類。無需在方法簽名中聲明它們就可以拋出它們。如果他們沒有被抓住,他們會被扔進堆棧。所以如果B拋出一個未被檢查的Exeption A也會拋出它。編譯器不會檢查是否處理了未檢查的異常,只有在運行時纔會看到,因此名稱爲RuntimeException。

檢查異常需要在簽名中聲明並且必須被處理,或者調用方法的方法簽名必須聲明異常被拋出。否則,編譯器會抱怨,你不會編譯該程序。因此,如果B拋出一個像FileNotFoundException這樣的CheckedException異常,則必須在B的簽名中聲明它。由於A沒有抓住它,它會被拋出更多。在這種情況下聲明A拋出異常可行,但這是不好的做法。

3

如果方法B拋出一些檢查異常,那麼它應該聲明拋出異常聲明。

0

如果發生異常,它將被最接近的catch塊捕獲。如果捕捉不在當前函數中,它將會冒泡直到找到任何相關的catch塊。

如果您明確聲明函數可能會引發錯誤,並且調用者必須處理該情況,那麼我們聲明throws的函數簽名爲typed exception