多异常处理

多异常处理

捕获处理:

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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章