日期:2014-05-20  浏览次数:20684 次

请教一下关于异常处理的问题
假如我的main方法要依次调用3个方法,f1(),f2(),f3().三个方法都可能抛出异常。
怎样设计异常处理,才能实现:
1. 不论三个方法是否抛出异常,都能依次执行f1,f2,f3。
2. 如果有异常,在main最后打出所有的异常信息。


------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

先给个思路,有事先闪人:
public static int flagIndex = 0;
public static StringBuffer errMsg = "";
public static void main(String[] args){
   try{
      f1();
      flagIndex = 1;
      f2();
      flagIndex = 2;
      f3();
   }catch(Exception ex){
      errMsg.append(ex.getMessage());
      if(flagIndex == 0){
         try{
            f2();
            flagIndex = 3;
            f3();
         }catch(Exception exx){
            errMsg.append(exx.getMessage());
            if(flagIndex==3){
               try{
                  f3();
               }catch(Exception exxxx){
                  errMsg.append(exxxx.getMessage());
               }
            }
         }
      }else if(flagIndex == 1){
         //获取方法f2执行出现的异常信息
         errMsg.append(ex.getMessage());
         try{
            f3();
         }catch(Exception exxx){
            errMsg.append(exxx.getMessage());
         }
      }else{
          //获取方法f3执行出现的异常信息
         errMsg.append(ex.getMessage());
      }
   }finally{
      System.out.println(errMsg.toString());
   }
}

感觉这样不如这样简洁:

public static void main(String[] args){
   StringBuilder errMsg = new StringBuilder();
   try{
      f1();
   }catch(Exception ex){
      errMsg.append("f1()的异常信息:").append(ex.getMessage());
   }
   try{
      f2();
   }catch(Exception exx){
      errMsg.append("f2()的异常信息:").append(exx.getMessage());
   }
   try{
      f3();
   }catch(Exception exxx){
      errMsg.append("f3()的异常信息:").append(exxx.getMessage());
   }
   // 打印异常 
   System.out.println(errMsg.toString());
   
}


是不是就是说如果异常被捕获并且处理了,程序就不会终止,会继续往下顺序执行?

是的。
除非又在catch块里使用throw语句,将捕获的异常再抛出去,否则捕获了处理掉,就不会在异常发生处终止程序了。