先给个思路,有事先闪人:
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());
   }
}

解决方案 »

  1.   

    感觉这样不如这样简洁: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());
       
    }
      

  2.   

    感觉这样不如这样简洁:
    [/code]嗯,赞同
      

  3.   

    感觉这样不如这样简洁: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());
       
    }是不是就是说如果异常被捕获并且处理了,程序就不会终止,会继续往下顺序执行?
      

  4.   

    当异常被捕获后,下面的代码可以继续执行。所以,2楼的代码完全OK。一楼想的太复杂了。主要是没做过这些异常的小测试。代码就懒得写了,二楼直接copy!
      

  5.   

    感觉这样不如这样简洁: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());
       
    }我注意到oh_Maxy mao哥,你这里都是在main里面搞,如果不是main里面,而是一个private void exe()里面,这样写很容易出问题吧?
    我觉得加个finally{}比较好 ... 
      

  6.   

    感觉这样不如这样简洁: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());
       
    }我注意到oh_Maxy mao哥,你这里都是在main里面搞,如果不是main里面,而是一个private void exe()里面,这样写很容易出问题吧?
    我觉得加个finally{}比较好 ... 
    不用加finally,因为每个catch块已经将异常捕获了,相当于内部消化掉了。
    finally可有可无。
      

  7.   

    感觉这样不如这样简洁: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语句,将捕获的异常再抛出去,否则捕获了处理掉,就不会在异常发生处终止程序了。