標籤:深度 bsp nts vat 設計 void bubuko pac rac
一.什麼是異常?
java在運行階段形成的問題,或者錯誤就是異常。
二.異常的繼承關係
可以看出所有的異常都是由Throwable繼承而來,但是在下一層,就分為:Error和Exception。Error主要是jvm方向上的錯誤,比如說記憶體不足,和請求棧深度超過最大深度。(一般遇到這種情況就是等死吧),在設計Java程式時只需要考慮Exception下的異常。
三.編寫自己的異常類
編寫一個異常類必須要從相應的異常類繼承,最好是選擇意思相近的異常類。
package com.cjm.exception;/** * 我的第一個異常類 * * @author 小明 * */public class MyFirstExceptionText { public static void main(String[] args) throws MyFirstException { for (int i = 0; i < 3; i++) { if (i == 2) { throw new MyFirstException("你拋出了一個你自己寫的異常"); } } }}class MyFirstException extends Exception { public MyFirstException() { } public MyFirstException(String str) { super(str); }}
四.撲捉異常
形式:
try{
//可能出現異常的代碼
}catch(類型1的異常){
// 處理方式
}
catch(類型2的異常){
// 處理方式
}
package com.cjm.exception;/** * 使用try catch來撲捉異常 * * @author 小明 * */public class TryCatchException { public static void f() throws MyFirstException, MysecoExpection { int i = 1; if (i == 0) { throw new MyFirstException("撲捉你的第一個異常"); } else { throw new MysecoExpection("撲捉你的第二個異常"); } } public static void main(String[] args) { try { f(); } catch (MyFirstException e) { e.printStackTrace(); } catch (MysecoExpection e) { e.printStackTrace(); } }}class MysecoExpection extends Exception { public MysecoExpection() { } public MysecoExpection(String str) { super(str); }}
五.日誌
import java.util.logging.Logger;/** * 日誌 * * @author 小明 * */public class MyDaily { public static void main(String[] args) { try { throw new MythrException(); }catch(MythrException e) { System.err.println(e); } }}class MythrException extends Exception{ private static Logger logger= Logger.getLogger("我的第一個日誌"); public MythrException() { StringWriter trace =new StringWriter(); printStackTrace(new PrintWriter(trace)); logger.severe(trace.toString()); } }
六.finally塊
fianlly語句一定會被執行,無論在try塊裡是否會有異常拋出。
try{
//可能出現異常的代碼
}catch(類型1的異常){
// 處理方式
}
catch(類型2的異常){
// 處理方式
}
finally{
//一定會被執行的語句
}
例子:
package com.cjm.exception;/** * finally塊 * * @author 小明 * */public class Finally { public static void main(String[] args) { try { System.out.println("我的沒有異常!"); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { System.out.println("這一步一定會被執行!"); } }}
package com.cjm.exception;/** * finally塊 * * @author 小明 * */public class Finally { public static void main(String[] args) { try { throw new MyFirstException("有異常拋出"); }catch (MyFirstException e) { // TODO: handle exception e.printStackTrace(); }finally { System.out.println("這一步一定會被執行!"); } }}
i
Java中的異常