前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java异常处理中的返回值

java异常处理中的返回值

作者头像
用户7886150
修改2021-04-22 14:33:11
修改2021-04-22 14:33:11
1.8K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Java异常处理

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 

1.try-catch中的返回值 

java代码中,有各种各样的try-catch代码用来捕获各种异常。那么在try-catch代码中,返回值是如何处理的呢?先看看下面的代码 

    public static int test_finally() {

        int x;

        try {

            x = 1;

            //int y = 1/0; 注释1

            //String raw = "a"; 注释2

            //raw.substring(3); 注释2

            return x;

        } catch(ArithmeticException ex) {

            x = 2;

            return x;

        } finally {

            x = 3;

        }

    }

2.执行结果 

1.如果代码正常执行,返回结果为1。 2.如果加入注释1的代码,返回结果为2。 3.如果加入注释2的代码,直接抛出异常无返回结果。 

3.结果分析 

第一种情况很好理解,代码走正常逻辑直接返回结果。 第三种情况也比较好理解,直接抛异常。 第二种情况有的同学可能会问,明明finally中给x=3,为什么会返回2? 

对于一个java方法来说,退出的方式有两种: 

遇到一个返回的指令(return语句)遇到一个异常,并且没有搜索到异常处理器,不会给调用返回任何值。 所以当catch中有return时,程序遇到return时就被标记了,finally块中只是执行最后的清理工作,如数据库连接的释放等。但是并不会修改return这个语句。 如果我们把代码放在intellij里面,x = 3这一行会提示: The value 3 assigned to 'x' is never used less 

如果我们在intellij里面debug,当代码运行到x = 3这一行时,堆栈信息如下: 

当程序执行到catch代码快中的return x 那一行时,首先是将x的一个副本保存在了方法栈帧的本地变量表中,执行return之前必须执行finally中的操作:x=3,此时将x设置为了3。但是return时是将本地变量表中保存的x的那个副本拿出来放到栈顶返回,所以出ArithmeticException异常或其子类异常时,返回值是2。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档