try{
  //code A
}catch(Exception e){
  //code B
  e.printStackTrace();
}finally{
  //code C
}如果code A抛异常,code B就会执行;如果code A不抛异常,code B就不会执行。
那finally的code C呢?code A抛不抛异常都要执行的么?
如果答案是肯定的话,如果不抛异常,先执行code A再执行code C
可是如果抛异常,是先执行code B还是code C?

解决方案 »

  1.   

    finally里的程序,不管会不会发生异常都会执行finally会在try/catch 执行完之后执行
      

  2.   

    这样的问题 你自己写个代码试验一下不就知道了try{
    //throw new Exception();    注释取消和加上 就是2中情况了
    System.out.println("a");
    return "A";
    }catch(Exception e){
    System.out.println("b");
    return "B";
    }finally{
    System.out.println("c");
    }
      

  3.   

    Java1.4之后finally 块就改成内联的方式了,Java1.4及其之前的版本是吧finally块作为一个微型子例程来调用的。
    所以这个try-catch-finally编译后类似于下面这样:try{
        //code A 
        //code C 
    }catch(Exception e){ 
        //code B 
        e.printStackTrace();
        //code C 
    }
      

  4.   

    如果code A里有return语句呢?是先return还是先执行finally的code C?
    try{
      //code A
      return value;
    }catch(Exception e){
      //code B
      e.printStackTrace();
    }finally{
      //code C
    }
      

  5.   

    如果 A里有return 先执行 finally中的 执行完了 进行return
      

  6.   

    如果A里有return 执行完A然后把return结果保存,再执行finally中的,finally中没有return则取出保存的return结果返回。如果finally中有return,就return finally中的结果。
      

  7.   

    是的,必须进行,除非程序刚好在finally关键字之前强行退出
      

  8.   

    这个必须执行 无论有return语句还是break