java.lang.Exception異常(例外):
是指程序執行中某些因素而造成程式流程異常中斷,可能造成異常的錯誤情況有很多,如:硬體錯誤,程式本身的錯誤...
java Exception異常分為: 編譯執行時期與執行時期的的異常錯誤,然而這裡指的是java程序在執行時期所造成的異常錯誤。
異常類別的種類:
1.java內建的異常類別:
java.lang 包下的內建 Exceptions 類
public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException
當編譯時編譯器檢查出你撰寫的陣列索引值出界時,會產生異常警告:ArrayIndexOutOfBoundsException
java.io 包下的內建 Exceptions 類
public class FileNotFoundException extends IOException
2.自訂的異常類別:
自定異常類別至少必須繼承 Throwable 類別,才能作為異常類別。
我們自定的異常通常不會是嚴重的Error,所以一般會繼承Exception類別或繼承Exception的子孫類別。
自訂的異常類範例:
class ValueOverstepException extends Exception{ //自訂數值超出設定值異常 public ValueOverstepException (){ super(); } public ValueOverstepException (String message){ super(message); } public void showMessage(){ //重寫java.lang.Throwable的方法 String tmpMsg = "異常代號:E001 \n 實際情況:" + getMessage() + "\n請記下代號洽相關人員處理"; JOptionPane.showMessageDialog(null, tmpMsg, "發生錯誤", JOptionPane.ERROR_MESSAGE); } }
執行時期所拋出的異常分為:
1.程式系統自動拋出
如:一個數 / 整數0,陣列索引值出界,讀取的檔案不存在...等等。
2.設計者自行拋出
設計者認為可能發生的情況,而需要自行定義,拋出某種異常對象產生,之後再對異常做處理。
其定義語法為:
語法:throw 實例化異常對象;
範例:throw new CaseException("轉型錯誤");
程序中只要執行throw敘述句就會有異常對象實例化並會拋出異常。
java系統也是使用throw 敘述句。
使用throw關鍵字能用來抛出任何滿足Throwable類別的異常(內建或自訂)。
如何拋出我們自訂的異常類呢!
範例:
public void setPoint( int x,int y ) throws ValueOverstepException { //這是使用自訂 值超出異常類 範例 if( (x < 100 && y < 100) || (x > 1000 && y > 1000)){ throw new ValueOverstepException("設置值已超出範圍"); //引發異常時,以下如有敍述句時,將不會執行 } } public void divided( int i ) throws ArithmeticException { //這是使用java.lang.ArithmeticException算術條件異常時拋出 if(i == 0 ){ throw new ArithmeticException("被除數為0"); //引發異常時,以下如有敍述句時,將不會執行 } }
異常的拋出與處理:
使用到類別中的方法有聲明可能拋出異常時,例如:java.io.InputStream類中的read()方法
public abstract int read() throws IOException //當你使用該方法時,可能會拋出例外(引發例外)IOException - 發生I / O錯誤。
當異常被拋出後,可用try...catch敘述句,自己安排捕捉可能發生異常的程式碼,再進一步處理特定的異常調適程序,如此可避免因異常而自動終止程序。例如:視窗應用程序異常時是否要彈出對話框或將異常寫入檔案中及網頁是否要提出異常警告並寫入記錄檔案....等等
基本語法: try catch finally
try{
//可能會產生異常的敘述句
}catch ( 異常類別1 異常對象名){
//針對異常類別1 此類型之異常做處理的敘述句
}catch ( 異常類別2 異常對象名){
//針對異常類別2 此類型之異常做處理的敘述句
}
//處理其他類別之異常的catch區塊
finally{
//無論異常是否發生,都會執行finally區塊中的敘述句
}
1.try區塊到finally區塊為一個敘述句,此敍述句不一定要有
finally區塊。
2.try區塊必需配合catch或finally區塊使用,不可獨立使用。
3.try catch區塊,可一個至多個,視需要而定。
4.try產生異常時才會到catch,尋找例外類別並實例該異常對象。
5.異常對象名可自訂,該異常對象為該catch區塊中的實例,出
了catch區塊,該異常對象消失。 6.有多個try catch區塊時,catch的異常類別不可相同,否則
編譯時即會錯誤。 7.finally 可用在資源清除的工作,如:關閉打開的檔案,刪除臨時 文件。