總網頁瀏覽量

2013年3月3日 星期日

例外處理

what:程式在"執行階段時"發生的錯誤,之後中斷執行程式。發生這種例外時又稱為拋出例外。例外發生時JVM會自動建立例外物件,將錯誤訊息存在物件內,如果沒有使用例外處理機制,會將物件內儲存的錯誤訊息輸出



which :
1.例外是java類別庫中java.lang底下的Throwable類別之子類別的物件
2.自訂例外


when:
編譯程式碼時不會找到的bug,執行程式時才會出現

1.執行處理檔案的程式,但找不到指定的檔案(NullPointException)
2.執行將使用者輸入的文字轉換成整數的程式,
但使用者輸入整數之外的值(NumberFormatException)

3.存取陣列時,陣列的索引超過陣列範圍
(ArrayIndexOutOfBoundException)

why:
防止例外發生時程式中途結束,繼續執行完程式。


how:
利用try...catch...finally處理,當例外發生時程式會執行catch區塊的程式。


try{
..........指定檢查是否發生例外部分.......
} catch(例外的類別 變數名稱){
......例外發生時,
例外的類別變數檢查例外發生事件是否符合宣告的類別。
之後執行這裡的程式。
}finally{
.......這裡可以省略不寫,不管有沒有例外發生一定會執行這邊......
如果有不管有無發生例外都要執行的程式時,就一定要寫在這邊
否則例外發生時會讓程式中斷
}



自訂例外類別:
1.宣告自訂例外類別,必須繼承Exception。
2.在想拋出例外的方法(method)名稱後面加上"throws 自訂的例外類別"。
3.在例外可能發生之處,利用"throw 代表物件的變數;"來拋出例外(踢皮球),丟給外呼叫此方法的方法。
throw new MyException();
(如果method 後面沒加上throws 例外類別的話,method內不可以加上 throw new MyException();)
4.在外一層方法(method)裡寫try....catch(MyException e),將例外處理掉

System.out.println(e);會列印例外外名稱以及發生所在行數

class MyException extends Exception{
}



處理不了例外,就會將例外丟改該方法的呼叫者處理,如果丟到main(),仍沒處理掉那麼就會中斷程式執行








Exception分成
RuntimeException、非RuntimeException(checked exception)

RuntimeException有自動拋出(throws)例外功能,如果method內產生RuntimeException例外物件
即使不使用throws拋出也會自動拋出,不必自己寫throws也不用try catch也可以編譯成功
但是不加上try catch執行階段如果產生RuntimeException就會輸出預設發生例外訊息


CheckedException:除了RuntimeException都是此類。
IOException(FileNotFoundException) InterruptedException
這類的例外沒有自動throws的功能,
如果產生例外事件
那麼要自己撰寫throws將其拋出或使用try catch否則會編譯失敗
像是Thread.sleep();  或者FileOutputStream這些東西

沒有留言:

張貼留言