多異常處理

多異常處理

捕獲處理:

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();

      }   

}

 

 

發佈了56 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章