A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

30finally是必须要运行的,不论前面是否有异常抛出
回复 使用道具 举报
塞肥肥塞牙人 发表于 2014-9-3 12:02
不是30呢,在看看哈,很多人都中招了呢

确实我错了,应该是20才对,不能在finally中进行重新赋值
回复 使用道具 举报
本帖最后由 Fightin黑马 于 2014-9-4 21:52 编辑

这个结果是30 ,不过原题应该是下面这样的,没有finally里面的return语句,下面结果是20public static int getNum() {
        int x = 10;
        try {
                int a=1/0;
                return x;
        } catch (Exception e) {
                x = 20;
                return x;                                                        
        }finally {                                                               

                x = 30;
             }

回复 使用道具 举报
try {
                         System.out.println(1/0);
}这里面是1除以0?
回复 使用道具 举报
奥  我知道了耶
回复 使用道具 举报
许愿じ☆VE杰 来自手机 中级黑马 2014-9-4 22:46:57
26#
学习了~
回复 使用道具 举报
20吧,如果catch中有return ,finally中的代码是在catch中间部分执行的
回复 使用道具 举报
我是来学习的
回复 使用道具 举报
应该是30吧  
回复 使用道具 举报
fantacyleo 发表于 2014-9-3 13:03
运行过了,就是30。貌似不少人明白了,楼主还中着招呢

关键在于2点:

这个try catch finally 的执行顺序是怎么样的?

不是执行try之后,遇到报错,执行catch去捕获吗?接着才会执行finally的吧 ?不是这个流程吗?如果是这个流程,在catch中,应该return了啊。。。
还是因为finally一定会执行到,所以不管前面有没有return??

点评

finally一定会被执行到  发表于 2014-9-5 11:08
回复 使用道具 举报
yl82846094 来自手机 中级黑马 2014-9-5 06:28:03
31#
看看!!!!
回复 使用道具 举报
这种题目和string有点像。int x=10,string s="10",一旦声明,就一直在常量池中存在,new一个对象并赋值才会改变。
回复 使用道具 举报
30,因为finally是一定执行的
回复 使用道具 举报
30.finally 必须执行到,除非catch块中有System.exit()方法终止程序的运行
回复 使用道具 举报
正确命案是:30
回复 使用道具 举报
F@C 中级黑马 2014-9-5 16:15:14
36#
进来学习
回复 使用道具 举报
在异常处理中,finally块里面的代码会无论如何都会执行的,里面有给X赋值30的操作,所以X最后为30
回复 使用道具 举报
   其实这道题没有那么迷惑的,只需记住:除非调用exit方法,否则finally最终都会被执行,所以finally中的代码会在所有的return之前被执行,而执行finally中的代码时因为存在return语句,所以就返回finally中的x值了。30
回复 使用道具 举报
也学习一下
回复 使用道具 举报
不是30么?
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马