1. 程式人生 > >java 中的異常處理機制

java 中的異常處理機制

平時敲程式碼的時候,編輯器有異常會有提示,顯示什麼就點什麼了,卻沒有深入瞭解這些為什麼會有這些異常。

5個關鍵字:
try,catch,throw,throws,finally

Throwable為程式中所有錯誤處理的父類
有兩個重要的子類: Error(錯誤)和 Exception(異常)
Exception(異常):是程式本身可以處理的
主要包括:
RuntimeException:屬於不可查異常,表示程式碼本身存在BUG,不是try-catch能解決的。
例如:
NullPointerException - 空指標引用異常
ClassCastException - 型別強制轉換異常。
IllegalArgumentException - 傳遞非法引數異常。
ArithmeticException - 算術運算異常
IndexOutOfBoundsException - 下標越界異常
這些異常在編譯期是無法檢測出來的

不是RuntimeException:就是編譯時異常,比如你在處理檔案流時的I/O問題,就屬於編譯時異常。這個時候用thr{}catch 來捕獲或者 throws即可。
例如:IOException,包括其子類 :
EOFException 檔案已結束異常
FileNotFoundException 檔案未找到異常

Error(錯誤):是程式無法處理的錯誤,這種異常被設計成不被捕獲,因為這種異常產生於JVM自身。例如,Java虛擬機器執行錯誤(Virtual MachineError),當 JVM 不再有繼續執行操作所需的記憶體資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機器(JVM)一般會選擇執行緒終止。

現在理解之前說的5個關鍵詞
異常處理有兩種方式:

1.try…catch…finally
try:用來檢測異常的
catch:用來捕獲異常的
finally:釋放資源的(可以有,也可以沒有)
*可以多個catch,最多隻能有一個finally
*無論try包圍的語句中是否發生異常,finally必須執行
(有幾種情況不執行:1.程式碼原因例如死迴圈在try塊中 …….2.System.exit(),程式被終止……3.JVM崩潰了…..4.忽然斷電……5.補充一個,多執行緒中若將含有finally塊的執行緒設定為守護執行緒,setDaemon(true),當非守護執行緒結束時,守護執行緒會被JVM立即停止)


*return可以放在try塊裡面,但是finally塊在返回前要被執行

2.throw,throws
thrwos是方法可能丟擲異常的宣告
語句用在方法聲明後面,表示再丟擲異常,由該方法的呼叫者來處理。
主要是宣告這個方法會丟擲這種型別的異常,使它的呼叫者知道要捕獲這個異常
出現在方法函式頭

throw是語句丟擲的異常
語句用在方法體內,表示丟擲異常,由方法體內的語句處理。
是具體向外拋異常的動作,所以它是丟擲一個異常例項。
出現在函式體
程式會在throw語句後立即終止,它後面的語句執行不到,然後在包含它的所有try塊中(可能在上層呼叫函式中)從裡向外尋找含有與其匹配的catch子句的try塊。
throw 丟擲的只能夠是可丟擲類Throwable 或者其子類的例項物件。如 throw new IOException;

也可以自定義異常類,當然要繼承Exception類;

目前理解這麼多,若有更深的理解會補充
技術小白,僅供參考,若有理解不到位的地方,歡迎提出問題,一起進步哈