七、異常——Exception
異常是JAVA中一種特殊的類,用於處理常式出現的各種問題。寫程式時,把遇到難以處理的情況定義為異常類,遇到對應的情況時就建立相應的異常對象,通過關鍵字throw拋出,使用該程式的人,根據一定的方法來獲得該異常對象,從而知道是個什麼樣的情況,根據需要作處理。
/**//*
**異常的建立和使用
*/
class MyDateException extends Exception...{//定義異常的子類
private String reason;
public MyDateException(String r)...{
reason = r;
}
public String getReason()...{
return (reason);
}
}
class MyDate...{
int year, month, day;
void setDay(int y, int m, int d)...{
if(d > 31)...{
throw new MyDateException("day too big!");//拋出異常
}
}
}
class Tt...{
public static void main(String ejing[])...{
MyDate t = new MyDate();
try...{//可能異常的代碼
t.setDay(2007, 1, 16);
}
catch (MyDateException ee)...{//捕獲異常
System.out.println(ee.getReason);//對該異常的具體處理
}
}
}7.1、多種異常的處理——多個catch的匹配
try...{
可能異常的代碼
}
catch (異常類型1 變數)...{//依次匹配,一旦匹配成功,後面的將不再繼續匹配
調用者對異常的處理//注意要把子類放在前面,父類放在後面
}
catch (異常類型2 變數)...{
調用者對異常的處理
}
catch (異常類型3 變數)...{
調用者對異常的處理
}7.2、定義總是執行的代碼
try...{
可能異常的代碼
}
catch (異常類型1 變數)...{
調用者對異常的處理}
catch (異常類型2 變數)...{
調用者對異常的處理
}
catch (異常類型3 變數)...{
調用者對異常的處理
}
finally...{ //前面的catch可以是多個,也可以不要
總是執行的代碼
}7.3、方法相互調用時異常的處理
異常將根據調用關係,一層層向外拋出,直到某個方法將其捕獲,否則程式將非正常退出,同時顯示異常類型
7.4、強制處理
為解決方案在被調用時不進行異常處理,在定義方法時加入throws關鍵字來聲明拋出異常(異常可多個)來實現強制處理
void setDay(int y, int m, int d) throws MyDateException...{
//....
}7.5、覆蓋與異常
子類中覆蓋的方法拋出的異常不能比父類被覆蓋的方法拋出的異常更多(子類方法不拋出異常,或者拋出的異常是父類方法異常的子類,或者和父類方法異常一樣),否則編譯出錯