首页  >  编程教程  >  编程问答  >  try…catch…finally语句里return语句的执行顺序是怎样的?

try…catch…finally语句里return语句的执行顺序是怎样的?

第一种情况

try语句块里面有return语句,catch语句块和finally语句块里面没有return语句。

代码如下:

public class Main {
    public static void main(String[] args) {
        System.out.println(test1());
    }
    public static int test1() {
        int i =10;
        try {
            System.out.println("try语句");
            return --i;
        }
        catch (Exception e) {
            System.out.println("catch语句");
        }
        finally {
            System.out.println("finally语句");
        }
    return 0;
    }
}

运行结果如下:

try语句
finally语句
9

执行顺序:

1.先执行try块中语句,包括return语句中的表达式运算,但不返回。

2.执行finally语句块中的全部代码。

3.最后执行try块中return 返回。

第二种情况

try语句块和finally语句块里面有return语句,catch语句块里面没有return语句。

代码如下:

public class Main {
    public static void main(String[] args) {
        System.out.println(test2());
    }
    public static int test2() {
        int i =10;
        try {
            System.out.println("try语句");
            return --i;
        }
        catch (Exception e) {
            System.out.println("catch语句");
        }
        finally {
            System.out.println("finally语句");
            return --i;
        }
    }
}

运行结果如下:

try语句
finally语句
8

执行顺序:

1.先执行try块中语句,包括return语句中的表达式运算,但不返回。

2.执行finally语句块中的全部代码。

3.最后发现finally语句块中有return语句,从这里返回。

第三种情况

try语句块和catch语句块里面有return语句,finally语句块里面没有return语句,存在异常。

代码如下:

public class Main {
    public static void main(String[] args) {
        System.out.println(test3());
    }
    public static int test3() {
        int i =10;
        try {
            System.out.println("try语句");
            int j = 10 / 0;
            return --i;
        }
        catch (Exception e) {
            System.out.println("catch语句");
            return --i;
        }
        finally {
            System.out.println("finally语句");
        }
    }
}

运行结果如下:

try语句
catch语句
finally语句
9

执行顺序:

1.先执行try块中语句,出现异常,catch捕获到异常。

2.执行catch块中语句,包括return语句中的表达式运算,但不返回。

3.执行finally语句块中的全部代码。

4.最后执行catch块中return 返回。

第四种情况

try语句块、catch语句块和finally语句块里面都有return语句,存在异常。

代码如下:

public class Main {
    public static void main(String[] args) {
        System.out.println(test4());
    }
    public static int test4() {
        int i =10;
        try {
            System.out.println("try语句");
            int j = 10 / 0;
            return --i;
        }
        catch (Exception e) {
            System.out.println("catch语句");
            return --i;
        }
        finally {
            System.out.println("finally语句");
            return --i;
        }
    }
}

运行结果如下:

try语句
catch语句
finally语句
8

执行顺序:

1.先执行try块中语句,出现异常,catch捕获到异常。

2.执行catch块中语句,包括return语句中的表达式运算,但不返回。

3.执行finally语句块中的全部代码。

4.最后发现finally语句块中有return语句,从这里返回。



本文固定URL:https://www.dotcpp.com/qa/56

编程杂谈
编程基础
知识答疑