標籤:技術 種類 使用者 src spring事務 指標 cat 相關 算術運算
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異常,一般情況下不自訂檢查異常。
(3)Spring事務預設只對運行時異常RuntimeException進行復原
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等終止方法的語句,則就不會跳回執行,直接停止。
(4)、throw:用於拋出一個實際的異常,可以單獨作為語句使用,拋出一個具體的異常對象。
(5)、throws:用在方法簽名中,用於聲明該方法可能拋出的異常,可拋出多個異常類型。
6、throw與throws關鍵字的區別
(1)throw關鍵字是用於方法體內部,用來拋出一個Throwable類型的異常。如果拋出了檢查異常,則還應該在方法頭部聲明方法可能拋出的異常類型。該 方法的調用者也必須檢查處理拋出的異常。如果所有方法都層層上拋擷取的異常,最終JVM會進行處理,處理也很簡單,就是列印異常訊息和堆棧資訊。如果拋出 的是Error或RuntimeException,則該方法的調用者可選擇處理該異常。
(2)throws關鍵字用於方法體外部的方法聲明部分,用來聲明方法可能會拋出某些異常。僅當拋出了檢查異常,該方法的調用者才必須處理或者重新拋出該異常。當方法的調用者無力處理該異常的時候,應該繼續拋出,而不是囫圇吞棗一般在catch塊中列印一下堆棧資訊做個勉強處理。
下面給出一個簡單例子:
常見的RuntimeException
NullPointerException- null 指標引用異常
ClassCastException - 類型強制轉換異常。
IllegalArgumentException - 傳遞非法參數異常。
ArithmeticException - 算術運算異常
ArrayStoreException - 向數組中存放與宣告類型不相容對象異常
IndexOutOfBoundsException - 下標越界異常
NegativeArraySizeException - 建立一個大小為負數的數組錯誤異常
NumberFormatException - 數字格式異常
SecurityException - 安全異常
UnsupportedOperationException - 不支援的操作異常
原文:http://blog.csdn.net/qq_27093465/article/details/52268531
Java異常結構