当try catch遇上return

来源:互联网 发布:js数组添加到指定位置 编辑:程序博客网 时间:2024/05/21 15:04

如果我们执行一个方法,在方法内抛出异常,那么抛异常那条代码后面的代码就不会被执行了,也就意味着如果我们的方法不是void的话,就没办法返回值,有一个办法,就是在catch代码块和finally代码块返回,但是实际开发中我们不能依赖异常机制来进行语句控制,这里只是了解一下当return语句出现在catch块和finally块里会出现什么情况。

测试1,让方法抛异常,并且catch块中有return语句,结果返回了catch块中的return

public static String test1() {        int x = 2, y = 0, result;        try {            System.out.println("抛异常前...");            result = x / y;  // 抛出java.lang.ArithmeticException: / by zero            System.out.println("抛异常后...");            return "return in method";        } catch (Exception e) {            e.printStackTrace();            return "return in catch";  // 此renturn语句被执行        }    }

测试2,让方法抛异常,并且catch块和finally块中都有return语句,结果返回了finally块中的return

public static String test2() {        int x = 2, y = 0, result;        try {            System.out.println("抛异常前...");            result = x / y;            System.out.println("抛异常后...");            return "return in method";        } catch (Exception e) {            e.printStackTrace();            return "return in catch";        } finally {            return "return in finally";  // 此renturn语句被执行        }    }

测试3,方法正常执行,并且catch块和finally块中都有return语句,结果返回了finally块中的return

public static String test3() {        try {            return "return in method";        } catch (Exception e) {            e.printStackTrace();            return "return in catch";        } finally {            return "return in finally";  // 此renturn语句被执行        }    }

结论:当finally块中有return语句时,必定会返回其中的return语句,很简单,因为finally块中的语句一定会被执行,如果在finally块之前返回return语句,方法执行结束,finally块中的语句就执行不了了,所以finally之前的return语句会被忽略;如果finally块中没有return语句,catch块中有,并且方法抛出异常,那么返回catch块中的return语句,方法执行中断。


原创粉丝点击