JavaSE基礎系列之異常

llovesoftware發表於2020-10-12

一.異常概念(異常的結構)

1.異常就是"不正常"的含義,在Java語言中主要指程式執行中發生的不正常情況。

2.java.lang.Throwable類是Java語言中錯誤(Error)和異常(Exception)的超類。

   其中Error主要用於描述Java虛擬機器無法解決的嚴重錯誤,通常無法編碼解決,如:JVM掛掉了等。

   其中Exception主要用於描述因程式設計錯誤或偶然外在因素導致的輕微錯誤,通常可以編碼解決,如:0作為除數等。

二.異常產生的原理

    java對異常預設的處理方式,是將問題丟擲給上一級。丟擲之前,java會根據錯誤產生的異常類,建立出該類的物件,底層並通過throw關鍵字將異常丟擲給上一級,不斷向上丟擲,直到拋給了JVM虛擬機器,虛擬機器拿到異常之後,就會將錯誤的原因和所在的位置,列印在控制檯。

二.異常分類

java.lang.Exception類是所有異常的超類,主要分為以下兩種:RuntimeException - 執行時異常,也叫作非檢測性異常。IOException和其它異常 - 其它異常,也叫作檢測性異常,所謂檢測性異常就是指在編譯階段都能被編譯器檢測出來的異常。

其中RuntimeException類的主要子類:

ArithmeticException - 算術異常

ArrayIndexOutOfBoundsException - 陣列下標越界異常

NullPointerException - 空指標異常

ClassCastException - 型別轉換異常

NumberFormatException - 數字格式異常

注意:

當程式執行過程中發生異常但又沒有手動處理時,則由Java虛擬機器採用預設方式處理異常,而預設處理方式就是:列印異常的名稱、異常發生的原因、異常發生的位置以及終止程式。

三.異常的處理方式

    在開發當中儘量使用if條件判斷避免異常的發生;若實在避免不了,則進行異常的捕獲; 若實在捕獲不了,則進行異常的丟擲;若希望使用針對性的異常,則需要自定義異常

1. 量使用if條件判斷來避免異常的發生.例如:物件是否為空。

2.異常捕獲

語法格式 :

try { 編寫可能發生異常的程式碼; }

catch(異常型別 引用變數名) { 編寫針對該類異常的處理程式碼;}

finally { 編寫無論是否發生異常都要執行的程式碼; } //關閉已經開啟的檔案等。

(注意: 當需要編寫多個catch分支時,切記小型別應該放在大型別的前面。)

3.異常的丟擲

基本概念

在某些特殊情況下有些異常不能處理或者不便於處理時,就可以將該異常轉移給該方法的呼叫者,

這種方法就叫異常的丟擲。當方法執行時出現異常,則底層生成一個異常類物件丟擲,此時異常程式碼後續的程式碼就不再執行。

語法格式

訪問許可權 返回值型別 方法名稱(形參列表) throws 異常型別,異常型別,...{ 方法體; }

如:public void show() throws IOException{}

4.自定義異常

基本概念:例如:當需要在程式中表達年齡不合理的情況時,而Java官方又沒有提供這種針對性的異常,此時就需要 程式設計師自定義異常加以描述。

相關文章