2011-08-20 235 views
2

我想知道如果方法調用簽名有異常,但方法 中沒有try catch塊,在運行時發生異常時會發生什麼情況。Java異常處理

public void someMethod (Collection<file> files) throws Exception 
for(File f : files) {  
    process(f); 
} 
+0

它被扔到調用堆棧上。根據定義。 –

回答

9

發生異常時會發生什麼情況。

當異常的方法中發生,該方法創建一個異常對象並把它關到運行系統

  • 創建異常對象,並將其交給到 運行時系統是稱爲「拋出異常」

  • 異常對象包含有關錯誤的信息, 包括其類型和程序的狀態,當0123發生錯誤

    運行時系統搜索調用堆棧包含異常 處理程序

enter image description here

當適當的處理程序中發現的方法,所述運行時系統通過處理者例外

  • 一個異常處理器,如果 類型拋出的異常對象的匹配 可以通過該處理程序

  • 選擇被說成捕獲該異常的異常處理程序處理的類型被認爲是合適的。

    如果運行時系統窮盡搜索所有在調用堆棧上的方法,而沒有找到適當的異常處理程序,運行時系統(並且因此,該程序)終止,並使用默認的異常處理程序

搜索的調用堆棧異常處理程序

enter image description here

+0

這樣的帖子應該被標記爲comminity wiki – MozenRath

1

然後拋出的異常將傳播到方法調用者和方法調用者必須處理它(無論是將其接住或聲明本身,它會拋出異常)。

3

的方法的拋出異常是從在捕獲異常的方法具有代碼分離的概念:

例外在try/catch內部拋出有資格由在該構建體捕獲塊捕獲。

當一個方法聲明它拋出一個或多個異常時,該類型的異常可能會被拋出該方法而被另一個異常捕獲。請注意,未檢查的異常不需要聲明。他們只是在不讓任何人知道發生了什麼事情的情況下快樂地行事。

1

異常只是函數的另一種返回類型。如果你在這個函數中沒有捕捉到它,它會傳遞給下一個。如果該函數不能捕獲它,那麼該函數也會將該異常傳遞給調用該函數的函數,並且該鏈繼續進行,直到您最終到達catch塊爲止,或者jvm通過系統打印其堆棧跟蹤。出。

希望這會有所幫助!

2

療法e爲2個的事情在Java異常處理機制

  1. 異常投擲
  2. 異常處理(具有catch()塊)。

在這種情況下,您的someMethod()引發異常。如果有任何方法使用此方法,則必須捕獲並處理異常。如果someMethod()的調用方法不處理異常,則方法調用層次結構中的任何一個方法必須爲catch(),並處理該異常。