Java語言學習(九):異常處理
阿新 • • 發佈:2018-11-25
異常是程式中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。常見的三種異常型別有:
- 檢查性異常,如開啟一個不存在的檔案
- 執行時異常,如陣列越界
- 錯誤,如棧溢位
所有的異常類是從 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{}
在類中可以提供一個無參構造方法和一個字串引數的構造方法,方便輸出除錯資訊。