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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请问X=?
public static int getNum() {
                int x = 10;
                try {
                        System.out.println(1/0);
                        return x;
                } catch (Exception e) {
                        x = 20;
                        return x;                                                       
                }finally {                                                               
                                                                                       
                        x = 30;
                        return x;
                }
        }

40 个回复

倒序浏览
。。。。 20
回复 使用道具 举报
30.。。。。
回复 使用道具 举报
好吧,说说为什么不,认真看一下,挺容易中招的
回复 使用道具 举报
应该等于30
回复 使用道具 举报

不是30呢,在看看哈,很多人都中招了呢
回复 使用道具 举报
不是30吗?我编译运行了一下,好像是30啊?
回复 使用道具 举报
运行过了,就是30。貌似不少人明白了,楼主还中着招呢;P

关键在于2点:
1. 异常处理是当try块中的代码出现异常后,程序跳转到专门的异常处理代码处继续执行的过程。异常处理完毕后,程序不会再回到出现异常的代码,而是执行位于try-catch-finally后的代码(当然,也可能不执行,比如在catch、finally中return了)。所以不要把太多与异常无关却又希望在异常处理后可能被执行的代码放到try块中
1. 因为finally一定会被执行到,所以本题最后x是30,并在finally中被返回
回复 使用道具 举报
30吧,应该是
回复 使用道具 举报
30,啊,抛出异常后程序捕获异常,不处理异常,finally一定会被执行到。
回复 使用道具 举报
楼主,给你小改了一下, 你猜猜是多少 ?
public static int getNum() {
        int x = 10;
        try {
                return x;
        } catch (Exception e) {
                x = 20;
                return x;                                                        
        }finally {                                                               
                                                                                
                x = 30;
                return x;
        }
回复 使用道具 举报
应该是30吧
回复 使用道具 举报
估计楼主的题目是:请问X=?
public static int getNum() {
                 int x = 10;
                 try {
                         System.out.println(1/0);
                         return x;
                 } catch (Exception e) {
                         x = 20;
                         return x;                                                        
                 }finally {                                                               
                                                                                         
                         x = 30;
                              }
         }

这样结果才是20
回复 使用道具 举报
10               
回复 使用道具 举报
安茹黑马 发表于 2014-9-3 14:23
估计楼主的题目是:请问X=?
public static int getNum() {
                 int x = 10;

你这个是我想发的,没注意,不好意思啊,各位
回复 使用道具 举报
之前有个帖子讨论过,大意是如果finally里对变量值进行改变,如果是基本数据类型,则值不变,如果是引用数据类型,值会改变,而本文finally里的变量是基本数据类型,所以值不变
回复 使用道具 举报
结果是30啊
回复 使用道具 举报
是不是20?
回复 使用道具 举报
如果finally{}中没有return就是20了,finally会在catch(){}中的return前执行,有reutrn直接就结束了
回复 使用道具 举报
  这类没验证还真不敢说出答案 0.0
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马