異常是程序中的一些錯誤,但並非全部的錯誤都是異常,而且錯誤有時候是能夠避免的。常見的三種異常類型有: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 代碼塊,它的最簡單的用法爲:code
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{}
在類中能夠提供一個無參構造方法和一個字符串參數的構造方法,方便輸出調試信息。io