search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

Java異常機制

異常是程序運行過程中出現的錯誤。本文主要講授的是Java語言的異常處理。Java語言的異常處理框架,是Java語言健壯性的一個重要體現。

Java把異常當作對象來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。在Java API中已經定義了許多異常類,這些異常類分為兩大類,錯誤Error和異常Exception。Java異常體系結構呈樹狀,其層次結構圖如圖所示:

1、Thorwable類

Thorwable類所有異常和錯誤的超類,有兩個子類Error和Exception,分別表示錯誤和異常。其中異常類Exception又分為運行時異常(RuntimeException)和非運行時異常,這兩種異常有很大的區別,也稱之為不檢查異常(Unchecked Exception)和檢查異常(Checked Exception)。

2.Error(錯誤):

一般是指java虛擬機相關的問題,如系統崩潰、虛擬機出錯誤、動態鏈接失敗等,這種錯誤無法恢復或不可能捕獲,將導致應用程序中斷,通常應用程序無法處理這些錯誤,因此應用程序不應該捕獲Error對象,也無須在其throws子句中聲明該方法拋出任何Error或其子類。

3.Exception:

Exception類及其子類是Throwable的一種形式,它指出了合理的應用程序想要捕獲的條件

(1)SQLException:該異常提供關於資料庫訪問錯誤或其他錯誤的信息。

(2)RuntimeException 是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類

(3)IOException:此類為異常的通用類,它是由失敗的或中斷的 I/O 操作生成的。

4、運行時異常和非運行時異常

(1)運行時異常都是RuntimeException類及其子類異常,如NullPointerException、IndexOutOfBoundsException等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯誤引起的,程序應該從邏輯角度儘可能避免這類異常的發生。

(2)非運行時異常是RuntimeException以外的異常,類型上都屬於Exception類及其子類。從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查異常。

5、異常的捕獲和處理

Java異常的捕獲和處理是一個不容易把握的事情,如果處理不當,不但會讓程序代碼的可讀性大大降低,而且導致系統性能低下,甚至引發一些難以發現的錯。

Java異常處理涉及到五個關鍵字,分別是:try、catch、finally、throw、throws。下面將驟一介紹,通過認識這五個關鍵字,掌握基本異常處理知識。

(1)、try:它裡面放置可能引發異常的代碼

(2)、catch:後面對應異常類型和一個代碼塊,用於表明該catch塊用於處理這種類型的代碼塊,可以有多個catch塊。

(3)、finally:主要用於回收在try塊里打開的物力資源(如資料庫連接、網路連接和磁碟文件),異常機制總是保證finally塊總是被執行。只有finally塊,執行完成之後,才會回來執行try或者catch塊中的return或者throw語句,如果finally中使用了return或者throw等終止方法的語句,則就不會跳回執行,直接停止。

finally執行過程:

(4)、throw:用於拋出一個實際的異常,可以單獨作為語句使用,拋出一個具體的異常對象。

(5)、throws:用在方法簽名中,用於聲明該方法可能拋出的異常。

6、throw與throws關鍵字的區別(1)throw關鍵字是用於方法體內部,用來拋出一個Throwable類型的異常。如果拋出了檢查異常,則還應該在方法頭部聲明方法可能拋出的異常類型。該 方法的調用者也必須檢查處理拋出的異常。如果所有方法都層層上拋獲取的異常,最終JVM會進行處理,處理也很簡單,就是列印異常消息和堆棧信息。如果拋出 的是Error或RuntimeException,則該方法的調用者可選擇處理該異常。

(2)throws關鍵字用於方法體外部的方法聲明部分,用來聲明方法可能會拋出某些異常。僅當拋出了檢查異常,該方法的調用者才必須處理或者重新拋出該異常。當方法的調用者無力處理該異常的時候,應該繼續拋出,而不是囫圇吞棗一般在catch塊中列印一下堆棧信息做個勉強處理。

下面給出一個簡單例子:

常見的RuntimeException

NullPointerException- 空指針引用異常
ClassCastException - 類型強制轉換異常。
IllegalArgumentException - 傳遞非法參數異常。
ArithmeticException - 算術運算異常
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
IndexOutOfBoundsException - 下標越界異常
NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常
NumberFormatException - 數字格式異常
SecurityException - 安全異常
UnsupportedOperationException - 不支持的操作異常



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦