多異常處理
捕獲處理:
1多個異常分別處理
2多個異常一次捕獲多次處理
3多個異常一次捕獲一次處理
聲明拋出異常:
聲明上使用,一次聲明多個異常
運行時異常被拋出可以不處理。即不捕獲也不聲明拋出
如果父類拋出了多個異常,子類覆蓋父類方法時,只能拋出相同的異常或者是他的子集
父類方法沒有拋出異常,子類覆蓋父類該方法時也不可拋出異常。此時子類產生該異常,只能捕獲處理,不能聲明拋出
當多異常處理時,捕獲處理,前邊的類不能是後邊類的父類
在try/catch後可以追加finally代碼塊,其中的代碼一定會被執行,通常用於資源回收。
代碼演示:
void show(){ //不用throws
try{
異常代碼;//產生異常,直接捕獲處理
}catch(Exceptione){
//處理方式
}
}
一個try 多個catch組合 : 對代碼進行異常檢測,並對檢測的異常傳遞給catch處理。對每種異常信息進行不同的捕獲處理。
void show(){ //不用throws
try{
異常代碼;//產生異常,直接捕獲處理
}catch(XxxExceptione){
//處理方式
}catch(YyyExceptione){
//處理方式
}catch(ZzzExceptione){
//處理方式
}
}
注意:這種異常處理方式,要求多個catch中的異常不能相同,並且若catch中的多個異常之間有子父類異常的關係,那麼子類異常要求在上面的catch處理,父類異常在下面的catch處理。
try finally 組合: 對代碼進行異常檢測,檢測到異常後因爲沒有catch,所以一樣會被默認jvm拋出。異常是沒有捕獲處理的。但是功能所開啓資源需要進行關閉,所有finally。只爲關閉資源。
void show(){//需要throws
try{
異常代碼;
}finally{
//釋放資源
}
}
例題
請用代碼實現如下需求:
寫一個方法實現獲取字符串某個索引上的字符的功能
寫一個測試測試方法調用上面寫的方法,使用thows方式進行處理異常,並在main方法中調用這個測試方法
再寫一個測試測試方法調用上面寫的方法,使用try...catch方式進行處理異常,並在main方法中調用這個測試方法
/*
定義 Test類
提供一個靜態方法:publicstatic char charAt(String str, int index) 用於獲取字符串str,index索引處的字符
在方法中charAt(String,intindex)
當字符串爲null拋出 Exception("字符串不能爲null")異常,
當字符串爲"" 的時候拋出 Excetion("字符串不能爲空") 異常;
當index不在[0,str.length()-1] 之間的時,拋出Exception("索引越界") 異常.
否則返回str在index索引的字符
提供一個靜態的方法testThrows()用於測試charAt(String,intindex)方法
在方法中調用charAt(String,int index)方法;
注意需要測試每一種情況
體會: 程序一旦遇到異常後面的代碼就不執行了
註釋運行過測試的代碼,繼續測試下一種情況
使用throws方式對異常進行處理
在main方法中,調用本方法
提供 一個靜態方法testTryCatch(),用於測試charAt(String,int index)方法
在方法中調用charAt(String,int index)方法;
i.注意需要測試每一種情況
使用try...catch方式對異常進行處理
在main方法中,調用本方法.
*/
publicclass Test10 {
// 獲取字符串某個索引上的字符的功能
publicstaticchar charAt(String str, intindex) throws Exception {
// 當字符串爲null拋出 Exception("字符串不能爲null")異常,
if(null == str){
thrownew Exception("字符串不能爲null");
}
// 當字符串爲"" 的時候拋出 Excetion("字符串不能爲空") 異常;
if(str.equals("")){
thrownew Exception("字符串不能爲空");
}
// 當index不在 [0,str.length()-1] 之間的時,拋出Exception("索引越界") 異常.
if(index < 0 || index >= str.length()){
thrownew Exception("索引越界"+index);
}
// 否則返回str在index索引的字符
returnstr.charAt(index);
}
// 提供一個靜態的方法testThrows() 用於測試charAt(String,int index)方法
publicstaticvoid testThrows() throws Exception{
charc;
// c = charAt(null, 0);
// c = charAt("", 0);
// c = charAt("abc",4);
c= charAt("abc",1);
System.out.println(c);
}
// 提供 一個靜態方法testTryCatch(),用於測試charAt(String,int index)方法
publicstaticvoid testTryCatch(){
// 在方法中調用charAt(String,int index)方法;
// i.注意需要測試每一種情況
// 使用try...catch方式對異常進行處理
try{
charc;
// c = charAt(null, 0);
// c = charAt("", 0);
// c = charAt("abc",4);
c= charAt("abc",1);
System.out.println(c);
}catch(Exception e){
System.out.println("捕獲異常");
e.printStackTrace();
}
System.out.println("程序繼續");
}
publicstaticvoid main(String[] args) {
// 在main方法中,調用testThrows 方法.
// testThrows();
// 在main方法中,調用testTryCatch方法
testTryCatch();
}
}