Java中try、catch、finally、return的执行顺序

来源:互联网 发布:淘宝界面 购物车代码 编辑:程序博客网 时间:2024/05/18 03:12

示例

try、finally中都有return的执行顺序

public class TestReturn {    private static int i = 1;    public static void main(String[] args) {        int i = testRetrun();        System.out.println("i:" + i);    }    private static int testRetrun() {        try {            i++;            System.out.println("try-i:" + i);            return ++i;        } catch (Exception e) {            System.out.println("catch");        } finally {            System.out.println("finally-i:" + i);            i++;            System.out.println("finally-i:" + i);            return ++i;        }    }}

打印结果

try-i:2finally-i:3finally-i:4Final-i:5

执行顺序

先执行try代码块,return逻辑执行但不返回,接着执行finally语句,return逻辑执行返回。

try、catch中都有return的执行顺序

private static int testRetrun() {        try {            i++;            System.out.println("try-i:" + i);            return ++i;        } catch (Exception e) {            System.out.println("catch-i:" + i);            return ++i;        } finally {            System.out.println("finally-i:" + i);            i++;            System.out.println("finally-i:" + i);        }    }

打印结果

try-i:2finally-i:3finally-i:4Final-i:3

执行顺序

先执行try代码块,return逻辑执行但不返回,接着执行finally语句,执行完毕后,再通过try代码块中的return返回。

其他情况都是类型的,这里就不做测试了

结论

  1. return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)
  2. finally永远会执行

    • 当finally中有return时,则通过finally中的return结束代码执行
    • 当finally中无retrun时,则执行完finally代码块后再通过try或catch中的return结束代码执行
原创粉丝点击