1. 程式人生 > >java基礎 -------異常處理機制

java基礎 -------異常處理機制

                                                                             異常處理機制

異常發生的原因

  •   使用者輸入了非法資料
  • 要開啟的檔案不存在
  • 網路通訊是連線中斷,或者 JVM 記憶體溢位
  • 其他一些物理錯誤

 常見的三種異常的型別:

  • 檢查性異常:最具代表性的檢查異常是使用者錯誤或問題引起的異常,這是程式設計師無法預見的。
  • 執行時異常:執行時異常時可能被程式設計師避免的異常。
  • 錯誤:錯誤不是異常,而是脫離程式設計師控制的問題 

Exception 類的層次

Exception 和 Error 是 Throwable 的子類

 Exception 和 Error 的子類名都是以父類名作為字尾。

注意:如果讓一個類成為異常類,必須要繼承異常體系,因為只有成為異常體系的子類才有資格具備可拋性

 

捕獲異常

使用 try 和 catch 關鍵字可以捕獲異常。try/catch 程式碼放在異常可能發生的地方

tyr

{

}catch(Exception e) 

{

    // Catch 塊

}finally{   // 通常用來關閉(釋放)資源

}

Catch 語句包含要捕獲異常型別的宣告。當保護程式碼塊中發生一個異常時, try 後面的 catch 塊就會被檢查。如果發生的異常包含在 catch 塊中,異常就會被傳遞到該 catch 塊,這和傳遞一個引數到方法是一樣。

finally 關鍵字用來建立在 try 程式碼塊後面執行的程式碼塊。

無論是否發生異常,finally 程式碼塊中的程式碼總會被執行。

在 finally 程式碼塊中,可以執行清理型別等收尾善後性質的語句。

多重捕獲塊

      一個 try 程式碼塊後面跟隨多個 catch 程式碼塊的情況就叫多重捕獲。

try{

// 程式程式碼

}catch(異常型別1 異常的變數名1)

{ // 程式程式碼

}catch(異常型別2 異常的變數名2){

// 程式程式碼

}catch(異常型別2 異常的變數名2){

// 程式程式碼

}

可以在 try 語句後面新增任意數量的 catch 塊。

如果保護程式碼中發生異常,異常被拋給第一個 catch 塊。

如果丟擲異常的資料型別與 ExceptionType1 匹配,它在這裡就會被捕獲。

如果不匹配,它會被傳遞給第二個 catch 塊。

如此,直到異常被捕獲或者通過所有的 catch 塊。

注意下面事項:

  • catch 不能獨立於 try 存在。
  • 在 try/catch 後面新增 finally 塊並非強制性要求的。
  • try 程式碼後不能既沒 catch 塊也沒 finally 塊。
  • try, catch, finally 塊之間不能新增任何程式碼。

throws/ throw 關鍵字:

如果一個方法沒有捕獲到一個檢查性異常,那麼該方法必須使用 throws 關鍵字來宣告。throws 關鍵字放在方法簽名的尾部。

也可以使用 throw 關鍵字丟擲一個異常,無論它是例項化的還是剛捕獲到的。

public class className

{

    public void fangfa throws RemoteException

{

throw new RemoteException();

}

}

一個方法可以宣告丟擲多個異常,多個異常之間用逗號隔開。

宣告自定義異常

在 Java 中你可以自定義異常。編寫自己的異常類時需要記住下面的幾點。

  • 所有異常都必須是 Throwable 的子類。
  • 如果希望寫一個檢查性異常類,則需要繼承 Exception 類。
  • 如果你想寫一個執行時異常類,那麼需要繼承 RuntimeException 類。

異常的注意事項:

1.子類在覆蓋父類的方法時,父類的方法如果丟擲了異常,那麼子類的方法只能丟擲父類的異常 或者該異常的子類。

2. 如果父類丟擲多個異常,那麼子類只能丟擲父類異常的子集。

簡單說: 子類覆蓋父類只能丟擲父類的異常或者子類或者子集。

注意:如果父類的方法沒有丟擲異常。那麼子類覆蓋時絕對不能丟擲。