try {
            i = 1;
            return i;
        } catch (Exception e) {
            return i = 3;
        } finally {
            i = 2;
            //System.out.println(i);
        }为什么返回的是1,而不是2??
请指教

解决方案 »

  1.   

    return i; 了
    如果你的i在外面return的话就是2了public int goTest() {
    int i;
    try{
    i = 1;
    //return i;
    }catch(Exception e) {
    i = 3;
    e.printStackTrace();
    }finally {
    i = 2;
    }
    System.out.println(i);
    return i;
    }
    public static void main(String[] args) {
    Test t = new Test();
    t.goTest();
    }
      

  2.   

    try {
      i = 1;
      return i; //在这里把返回值压栈,即返回值 1 压栈
      } catch (Exception e) {
      return i = 3;
      } finally {
      i = 2; //然后执行 i = 2
      //System.out.println(i); 
      }
    //然后函数调用结束,返回值 1 出栈如果在finally处也调用 return i,那么新的返回值被压栈,最后返回的就是finally的return
      

  3.   

    try语句块里面没有异常,执行完return后,跳到finally中执行,此时的赋值操作对i值没有影响了,因为已经在try块中就返回了。
      

  4.   

    try{}里面已经return了 ,就不会执行finally里
      

  5.   

    finally的代码会在return前执行,LZ把return i放到finally就返回2了
      

  6.   

    因为这个i是个值传递方式,语句顺序是先return i ;//实际这个在运行是就是 return 1;然后在finally中
    把2赋给i,但实际这时,return已经不再用i了
    如果以下代码,就会出现你预想的结果
    public static void main(String args[]) {
    int[] k = new T1().t1();
    System.out.print(k[0]);
    } public int[] t1() { int[] i = {1,2,3};
    try {
    i[0] = 11;
    return i;
    } catch (Exception e) {
    i[0] = 21;
    return i;
    } finally {
    i[0] = 31;
    System.out.println(i);
    }
    }输出为31,也就是在finally中修改过的结果
      

  7.   

    try-catch-finally这样的组合,try是一定执行的,但不管有没有进catch,
    finally都会执行,如果有return语句,那它将在return之前执行再返回。
    我们在开发过程中可这样使用:try {
    //打开数据库连接
    //开始事务
    //操作数据库
    //返回操作结果
    } catch (Exception e) {
    //回滚事务
    //返回错误代码
    e.printStackTrace();
    }finally{
    //关闭数据库
    }
    //不过不建议一个方法内出现多个return语句,你可以用一个变量接收它,最后返回这个变量
      

  8.   

    return i;的时候已经决定退出并返回1了,只是退出的过程中执行了i=2,但是返回值已经得到了就是1
      

  9.   

    你们别误认子弟了,不清楚别乱解释,其实finally是在return之前执行的,只是i的作用域的问题,你把int i=0放在try外面的话,输出的是2
                    int i = 0;
    try{
    i = 1;
    }catch(Exception e){

    }finally{
    i = 2;
    }
    System.out.println(i);
      

  10.   

    代码贴错了,
                    int i = 0;
    try{
    i = 1;
    return ;
    }catch(Exception e){

    }finally{
    i = 2;
    System.out.println(i);
    }
    我运行的结果是2,按照楼主的写法,好像编译不会通过。需要扩大i的作用域
      

  11.   

    try后面是个如return语句,return后这个程序就结束了,就不会执行finally里面的语句了。
      

  12.   

    ry后面是个如return语句,return后这个程序就结束了,就不会执行finally里面的语句了。
      

  13.   

    晕,那个才是正解哦,算了相信:
    finally的代码会在return前执行