public static int process() throws Exception {
try {
System.out.println("try"); //1
return 1; //2
} finally {
System.out.println("finally"); //3
}
}
执行流程,为什么?public static int process() throws Exception {
try {
System.out.println("try"); //1
return 1; //2
} finally {
System.out.println("finally"); //3
return 3; //4
}
}
执行流程,为什么?

解决方案 »

  1.   

    肯定会先执行finally里面的哟,然后再return
      

  2.   

    Try -> return 1 -> finally -> return 3
      

  3.   

    Try -> return 1 -> finally -> return 3 
    finally 块里面的执行完此时才真正return
      

  4.   

    http://www.ticmy.com/?p=56
      

  5.   

    try catch finally按顺序执行try,再执行finally,在执行try catch finally 之外代码
    按顺序执行try,发生异常则执行catch 再执行finally, try catch finally以外不执行。
      

  6.   

    如果try块中存在return语句,那么首先也需要将finally块中的代码执行完毕,然后方法再返回。
      

  7.   

    finally处理机制,如果没有抛出异常的话,代码运行到return语句,然后执行finally语句块,最后回到return语句继续执行。
      

  8.   

    借用一下8楼
    try catch finally按顺序执行try,再执行finally,在执行try catch finally 之外代码
    按顺序执行try,发生异常则执行catch 再执行finally, try catch finally以外不执行。 
     
      

  9.   

    从打印输出结果来看,两道题都输出try finally.输出结果没区别?
      

  10.   

    看了6楼的文章理解了一下
    public class Test {
        public static void main(String... args) {
            System.out.println(getValue1());
            System.out.println(getValue2());
        }
     
        public static int getValue1() {
            int i1 = 0;
            int i2 = 1;
            try {
                return i1;
            } finally {
                return i2;
            }
        }
     
        public static int getValue2() {
            int i = 1;
            try {
                return i;
            } finally {
                i++;
            }
        }
    }getValue1()和getValue2()返回的都是1;
    因为getValue1()try和finally都有return 所以try里的return的值会废弃
    getValue2()执行顺序是执行try然后执行finally,因try里的return的值会放到临时变量里,finally修改的是原始变量,但try里返回的是临时变量,所以是1
      

  11.   

    1-2-3
    1-2-3-4先执行try里面的数据, finally是最后一定执行的
      

  12.   

    输出结果不同!都执行了try finnally但是返回结果不同
    第一个
    try
    finally
    1
    第二个
    try
    finally
    3
    我讲下顺序:
    第一个执行顺序:try中代码顺序执行,碰到return的时候,跳转到finally执行完里面的代码,在回来执行try中的return.所以结果就是try finally 1第二个执行顺序:try中代码顺序执行,碰到return的时候,跳转到finally执行里面的代码,这时候发现finally也有return,按优先级try和finally都有return,那优先执行finally里的return所以返回3,try里的return不执行。
      

  13.   

    try catch finally按顺序执行try,再执行finally,在执行try catch finally 之外代码
    按顺序执行try,发生异常则执行catch 再执行finally, try catch finally以外不执行