他已经return了
还做finally吗??

解决方案 »

  1.   

    finally做的话 在什么时候做
      

  2.   

    会,在return前做。这个你可以看看 老紫竹的研究室, 里面有一篇就是写这个的。
      

  3.   

    除非你认为在执行过程中终止了线程.否则finally中的语句一定执行
      

  4.   

    给楼主看看:
    http://www.laozizhu.com/view.jsp?articleId=28
      

  5.   

    查看复制到剪切板打印
    /**  
     * return和finally的执行顺序分析.  
     *   
     * @author 老紫竹研究室(laozizhu.com)  
     *   
     */  
    public class Test {   
      
      public static void main(String[] args) {   
        System.out.println(test());   
      }   
      
      public static int test() {   
        int b = 0;   
        try {   
          return b = 4 + 2; // #1   
        } finally {   
          System.out.println(b); // #2   
        }   
      }   
    }  
    这个程序执行的是test 返回的是int 这个和后面的finally没有关系啊
    打印的是6 和后面有什么关系吗
      

  6.   


    会做finally,finally不管前面有没有捕捉到都会执行.
      

  7.   

    仍然执行
    记住finally是永远都执行的.
      

  8.   

    try-catch-finally是这样执行的:先执行try中的语句,如果有异常,在相应的catch中执行,然后再执行finally中的语句,如果在catch中有return语句,那么,在这个return这个地方,程序先暂停一下,去执行finally 里面的东西,执行完毕了,再来执行return语句的。
      

  9.   

    很生动,这样的逻辑可以保证 finally中的代码块一定得到执行,而最常用的就是finally代码块中释放资源:数据库资源以及可能出现内存泄露的文件资源等
      

  10.   

    我的eclipse上运行后输出的是两个6啊,,怎么回事??我将fianally里面的System.out.println(b); 改为b = 7; 只输出一个6!!
    这 不合理啊。。
    望达人指定!
      

  11.   

    会执行,不管是什么情况下,finally都会执行,就算return在他的前面,也一样会在先执行完finally中的语句后,才会去执行return
      

  12.   


    try{
       //会出现异常的地方
    }catch(SomeException e) {
       //出现异常如何处理的地方
    }finally{
       //不管是否出现异常都要处理的情况,比如关闭数据库联系,关闭打开的文件等等
    }
      

  13.   


    try{
       //会出现异常的地方
    }catch(SomeException e) {
       //出现异常如何处理的地方
    }finally{
       //不管是否出现异常都要处理的情况,即使已经有return语句比如关闭数据库联系,关闭打开的文件等等
    }
    //即使已经有return语句也会执行finally
      

  14.   


    public static void main(String[] args) {
    System.out.println(frequenceCheck());
    } @SuppressWarnings("finally")
    public static int frequenceCheck() {
    try{
    System.out.println("in try block");
    return 1;
    }catch(Exception e){
    System.out.println("in catch block");
    return 2;
    }finally{
    System.out.println("in finally block");
    return 3;
    }
    }输出是3
      

  15.   

    1.如果没有异常,没有return
    前面的代码 -> try -> finally -> 后面的代码2.如果有异常,没有return
    前面的代码 -> try(直到发生错误的前一行) -> catch -> finally -> 后面的代码3.如果没有异常,有return
    前面的代码 -> try(return前一行) -> finally -> return语句
      

  16.   

    会执行的,在return之前会执行的
      

  17.   

    肯定是要执行的,不管try-catch中执行了哪段代码,finally都一定会执行
      

  18.   

    不管try-catch中执行了哪段代码,finally都一定会执行
      

  19.   

    对的.finally里的return会是最终结果.try和catch里的return被ignore了
      

  20.   

    finally表示总是执行,所以顺序应该是
    System.out.println("in try block");
    ---return 1  并没有return 而是执行finally
    如果finally 下没有return 的话,输出的就是1
      

  21.   

    会做的
    除非有
    System.exit(0);
    退出就不执行了啊
      

  22.   

    finally模块是肯定会执行的模块!
      

  23.   

    finally后面的不管有没有异常总是会执行的,而且一定在return前执行
      

  24.   

    当然,和try 搭配,肯定得执行啊。return  一般都是最后执行的(在一个函数里)
      

  25.   

    finally始终都要执行,执行时间就在return语句之前
      

  26.   


    不对,你试试这个程序:
    package test;import java.io.IOException;
    public class Main {
    public static void main(String[] args) throws IOException {
    System.out.println(tcf());
    }


    public static int tcf(){
    try{
    System.out.println("try");
    throw new Exception();
    //return i = one();
    }
    catch (Exception e) {
    System.out.println("catch");
    return one();
    }
    finally{
    System.out.println("finally");
    return two();
    }
    } public static int one(){
    System.out.println("one");
    return 1;
    }

    public static int two(){
    System.out.println("two");
    return 2;
    }}输出是:
    try
    catch
    one
    finally
    two
    2说明是先执行catch中的return one()中的one()方法, 但不return, 执行完再执行finally
      

  27.   

    学习了 不过如果函数返回值就是return的 就不好这样做哦
      

  28.   


    的确,应该是TRY->CATCH->FINALLY 该执行的语句都执行,包括RETURN,每一次RETURN的返回值其实都被保存了起来,无论返回值在哪里被改写,或者被改写了多少次,最后都只是把预先保存好的返回值返回,而不是FINALLY完之后又跳到TRY的RUTURN去执行。