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這些東西
沒有留言:
張貼留言