黑马程序员技术交流社区

标题: 分享一个关于finally的小面试题 [打印本页]

作者: bfl625    时间: 2014-9-2 21:08
标题: 分享一个关于finally的小面试题
public static void main(String[] args) {
                int num = getNum();
                System.out.println(num);
        }
public static int getNum() {
                int x = 10;
                try {
                        System.out.println(1/0);
                        return x;
                } catch (Exception e) {
                        x = 20;
                        return x;                                                        //当程序执行到了return语句会有一个返回路径
                }finally {                                                                //但是在完全return之前会看有没有finally如果有
                                                                                                //先执行finally,再把return返回路径的值返回
                        x = 30;
                        System.out.println("finally执行了吗");
                        //return x;
                }
        }


作者: 常乃伟    时间: 2014-9-2 21:44
抓住一只妹子!!!!!!!!!!!!!!!还是一只基佬???????????
作者: 进击的大鹏    时间: 2014-9-2 23:25
还没学到,请问 try, catch finally是关键字吗?都是什么意思。
作者: bfl625    时间: 2014-9-3 11:02
进击的大鹏 发表于 2014-9-2 23:25
还没学到,请问 try, catch finally是关键字吗?都是什么意思。

这是异常那部分的知识!try里面放有可能出现异常的代码;catch对异常做出处理;finally里面放的是一定会执行的代码,一般用于释放资源!
作者: 柳超    时间: 2014-9-3 11:23
java 0803和你有什么关系
作者: liaohongjie    时间: 2014-9-3 11:33
finally里面return把try catch里面的return给覆盖了
作者: 东子-7'C    时间: 2014-9-3 12:05
一般finally里放的都是关闭资源的代码,为什么你的没有呢
作者: 我要淡定。    时间: 2014-9-3 13:08
finally执行了吗?
30
作者: bfl625    时间: 2014-9-3 13:43
我要淡定。 发表于 2014-9-3 13:08
finally执行了吗?
30

不是的,是20.
作者: bfl625    时间: 2014-9-3 13:45
东子-7'C 发表于 2014-9-3 12:05
一般finally里放的都是关闭资源的代码,为什么你的没有呢

这是个面试题,没有使用资源,重点是考察finally的使用!
作者: dhgcy    时间: 2014-9-3 22:39
谢谢分享
作者: ╃→梅飛揚之城    时间: 2014-9-4 10:12
懂了,,谢谢
作者: ︶ㄣ冰衅ヅ    时间: 2014-9-4 10:53
finally执行了吗
20
作者: 王凯路路    时间: 2014-9-4 11:39
关于这种题目还真是层出不穷啊,  受教了
作者: Fightin黑马    时间: 2014-9-4 22:05
20 ,在try里执行出现异常时跳进catch,try里面异常下面的return执行不到.catch里面x赋值为20 并且return加载进内存,这时加载进内存的x是20,然后进入finally x被赋值为30 然后结束,但是返回的还是内存里的20.如果finally里面有return语句则覆盖catch里面的return变成30.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2