1. 程式人生 > 其它 >java為什麼有些異常throw出去需要在函式頭用throws宣告,一些就不用?

java為什麼有些異常throw出去需要在函式頭用throws宣告,一些就不用?

用的越多,不懂的就越多

why?

java異常體系結構如下

 Throwable類:所有的異常類,都直接或者間接的繼承這個類。三個重要的方法:

堆疊跟蹤是方法呼叫過程的軌跡,它包含了程式執行過程中方法呼叫的順序和所在原始碼行號。

堆疊跟蹤資訊從下往上,是方法呼叫的順序。

Throwable類的兩個直接子類

Error:是程式無法修復的嚴重問題,程式設計師無法修復,這能讓程式終止,比如jvm內部錯誤、存溢位和資源耗盡等嚴重情況。

Exception:是程式可以恢復的程式,是程式設計師可以從掌控的,比如,除零異常,空指標訪問,網路連線終端,讀取不存在等。

在Exception下面又有兩個異常:

    非受檢異常指的是java.lang.RuntimeException和java.lang.Error類及其子類,所有其他的異常類都稱為受檢異常。兩種型別的異常在作用上並沒有差別,唯一的差別就在於使用受檢異常時的合法性要在編譯時刻由編譯器來檢查。正因為如此,受檢異常在使用的時候需要比非受檢異常更多的程式碼來避免編譯錯誤。

1 受檢查異常:指除RuntimeException以外的異常類。共同特點是,編譯器會檢查這類異常是否進行了處理,要麼捕獲,要麼不丟擲,否則會發生編譯錯誤,種類很多。

2 非受檢查異常(執行時異常):執行時異常是繼承RuntimeException類的直接子類或者間接子類,執行時異常往往是程式設計師所犯的錯誤導致的 。特點是編譯器不檢查這類異常是否得到了處理,對於這類異常不捕獲也不丟擲,程式也可以編譯過,一旦遇到就導致程式終止。

    對於執行時異常通常不採用丟擲或捕獲處理方式,而是應該提前預判,防止這種發生異常,做到未雨綢繆。例如除零時候,在進行除法運算之前應該判斷除數是非零的,修改示例程式碼如下,從程式碼可見提前預判這樣處理要比通過try-catch捕獲異常要友好的多

所以checked exception就是要強制你去處理這個異常(不管你throws多少層,你終歸要在某個地方catch它);而runtime exception則沒有這個限制,你可以自由選擇是否catch。

來源:https://blog.csdn.net/zzwpublic/article/details/113792054