一、異常實作及分類
#1.先看下異常類別的結構圖
上圖可以簡單展示異常類別實作結構圖,當然上圖不是所有的異常,使用者自己也可以自訂異常實作。上圖已經足夠幫我們解釋和理解異常實現了:
java相關免費視訊教學:java教學影片
1.所有的例外都是從Throwable繼承而來的,它是所有異常的共同祖先。
2.Throwable
有兩個子類,Error
和Exception
。
其中Error是錯誤,對於所有的編譯時期的錯誤以及系統錯誤都是透過Error拋出的。這些錯誤表示故障發生於虛擬機器本身、或發生在虛擬機器試圖執行應用時,如Java虛擬機器執行錯誤(Virtual MachineError
)、類別定義錯誤(NoClassDefFoundError
)等。
這些錯誤是不可查的,因為它們在應用程式的控制和處理能力之外,而且絕大多數是程式執行時不允許出現的狀況。對於設計合理的應用程式來說,即使確實發生了錯誤,本質上也不應該試圖去處理它所引起的異常狀況。在 Java中,錯誤透過Error的子類別來描述。
3.Exception
是另一個非常重要的例外子類別。它規定的異常是程式本身可以處理的異常。
異常和錯誤的差別是,異常是可以被處理的,而錯誤是沒法處理的。
4.Checked Exception
可檢查的異常,這是編碼時非常常用的,所有checked exception都是需要在程式碼中處理的。它們的發生是可以預測的,正常的一種情況,可以合理的處理,例如IOException
,或一些自訂的異常。除了RuntimeException
及其子類別以外,都是checked exception。
5.Unchecked Exception
RuntimeException
及其子類別都是unchecked exception。例如NPE空指標異常,除數為0的算數異常ArithmeticException
等等,這種異常是運行時發生,無法預先捕捉處理的。 Error也是unchecked exception,也是無法預先處理的。
二、例外的處理
程式碼中的例外處理其實是可檢查例外的處理。
1. 透過try...catch語句區塊來處理:
try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 }
Catch 語句包含要擷取例外類型的宣告。當保護程式碼區塊中發生一個異常時,try 後面的 catch 區塊就會被檢查。
如果發生的例外包含在 catch 區塊中,則異常會被傳遞到該 catch 區塊,這和傳遞一個參數到方法是一樣。
2. 另外,也可以在具體位置不處理,直接拋出,通過throws/throw到上層再進行處理,具體的,如果一個方法沒有捕獲到一個檢查性異常,那麼該方法必須使用throws 關鍵字來聲明。
throws 關鍵字放在方法簽章的尾部。也可以使用 throw 關鍵字拋出一個異常,無論它是新實例化的還是剛捕獲到的。
下面方法的宣告會拋出一個 RemoteException 例外:
import java.io.*; public class className { public void deposit(double amount) throws RemoteException { // Method implementation throw new RemoteException(); } //Remainder of class definition }
3. finally關鍵字
finally 關鍵字用來建立在 try 程式碼區塊後面執行的程式碼區塊。無論是否發生異常,finally 程式碼區塊中的程式碼總是會被執行。在 finally 程式碼區塊中,可以執行清理類型等收尾善後性質的語句。
finally 程式碼區塊出現在 catch 程式碼區塊最後,語法如下:
try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }finally{ // 程序代码 }
java相關文章教學推薦:java入門程式
#以上是java中異常類型及異常處理的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!