1. 程式人生 > >Java語言學習(九):異常處理

Java語言學習(九):異常處理

    異常是程式中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。常見的三種異常型別有:

  • 檢查性異常,如開啟一個不存在的檔案
  • 執行時異常,如陣列越界
  • 錯誤,如棧溢位

    所有的異常類是從 java.lang.Exception 類繼承的子類,Exception類是Throwable 類的子類,如下圖所示:

 

    常見的非檢查性異常有:陣列下標越界異常ArrayIndexOutOfBoundsException、空指標異常NullPointerException等,檢查性異常有:類未發現異常ClassNotFoundException,表示應用程式試圖載入類時,找不到相應的類,NoSuchMethodException表示請求方法不存在等等。

    捕獲異常,如下例項:

FileInputStream fis = null;
try{
   File file = new File("d:\\a.txt");
   fis = new FileInputStream(file);
}catch(FileNotFoundException e){
   e.printStackTrace();
}finally{
   try{
      fis.close(); //釋放資源
   }catch(IOException e){
      e.printStackTrace();
   }
}

    上面例項中使用的捕獲異常的方式是:try/catch 程式碼塊,它的最簡單的用法為:

try
{
   // 程式程式碼
}catch(ExceptionName e1)
{
   //Catch 塊
}

    當然,也可以使用多重捕獲塊,即後面有多個catch塊,匹配不同的異常,finally塊屬於可選部分,無論是否發生異常,該程式碼塊總會被執行,這裡可用來執行清理型別等收尾善後性質的語句,如資源的釋放等。

    如果一個方法沒有捕獲一個檢查性異常,那麼該方法必須使用 throws 關鍵字來宣告。throws 關鍵字放在方法簽名的尾部。也可以使用 throw 關鍵字丟擲一個異常,僅可應用在方法體中,無論它是新例項化的還是剛捕獲到的。用法如下:

//throws用法
public void Fun() throws Exception{
    //throw用法
    new throw Exception();
}

    除了Java中提供的異常類,我們也可以自定義異常類,需要繼承Exception類或者Exception的子類。最簡單的自定義異常類如下:

public class FunException extends Exception{}

    在類中可以提供一個無參構造方法和一個字串引數的構造方法,方便輸出除錯資訊。