異常類的體系結構如下:
Throwable
|-Error
|-Exception
|-IoExcetion
|-SQLException
|-RuntimeException
*派生與Error與RuntimeException(執行時異常)的異常叫未檢查異常,不用程式設計師處理,直接虛擬機器會進行處理,這也就是說程式本身的錯誤
其他的異常叫做已檢查異常,必須由程式設計師進行處理
常見的異常如下:
型別轉化異常 ClassCastException
陣列越界異常 ArrayIndexOutOfBoundsException
空指標異常 NullPointerException
以上都是派生與RuntimeException
檔案尾讀取資料異常 EOFException
開啟不存在的檔案異常 FileNotFoundException
查詢不存在的Class物件異常 ClassNotFoundException
*使用異常的4種情況:
呼叫一個丟擲已檢查異常的方法
程式執行過程中發生錯誤
程式出現錯誤
JAVA虛擬機器和執行庫出現內部錯誤
*throw與throws區別
throw用於丟擲異常,throws用於宣告異常,即在方法體後註明可能丟擲的異常
*try catch字句
*可以捕獲多個異常
try{}
catch(e){}
catch(e){}
....
*可以合併異常
try{}
catch(e1 | e2){}
*catch子句可以再次丟擲異常
方式:一般把原始異常當作再次丟擲異常的原因
程式碼舉例:
... catch(e) { Throwable se = new ServletException("data error"); se.initCause(e); throw se; }
當捕獲異常se後,可以利用如下程式碼獲得原始異常
Throwable e = se.getCause();
*finaly子句
當利用try catch丟擲異常後,剩餘程式碼不會執行,會停止程式,鍵入在程式終止之前會申請一些本地資源還未關閉,於是引入了finally子句。
執行時刻:不管拋沒拋異常,finally子句一定執行。
*帶資源的try語句
使用條件:所使用的資源類實現了一個AutoCloseable介面類,其中有個方法void close() throws Exception,這是JDK7中的特性
形式:程式碼舉例
try(Scanner in = new Scanner(new FileInputStream("/...."))); { while(in.hasNext()) .... }
此中使用形式,確保發生任何情況發生異常都會被關閉