偶前不久见到的一个面试题,看看你的基本功!

NewMoons 2010-11-14 03:28:58

public class Test {
public static int i = 0;

public static int exception(){
try {
throw new Exception();
}catch(Exception e){
return ++i;
}finally{
System.out.println("finally " + ++i);
return ++i; //行100
}
}

public static void main(String[] args){
System.out.println("main " + Test.exception());
System.out.println("over " + Test.i);
}

}


不用编译器,看看你能不能给出正确的输出结果。

如果去掉 “行100”这行代码,结果又如何?

这题偶做错了...
这个题出的不是很好,但作为校验基本功还算可以。
...全文
816 66 打赏 收藏 转发到动态 举报
写回复
用AI写文章
66 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishaolei309 2010-11-18
  • 打赏
  • 举报
回复
有"行100"这行代码时,结果如下:
finally2
main3
over3

去掉"行100"这行代码时,结果如下:
finally2
main1
over2
同意一楼的看法!!
------ 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chen420 的回复:]
我也做错了,调试了下,没怎么看懂!能不能解释下!还有i++和++i应该是一样的吧,只是运算顺序不一样吧!
[/Quote]
i++:指的是先运行i,后执行+
++i:指的是先对i进行+,然后再执行
NewMoons 2010-11-18
  • 打赏
  • 举报
回复
准备结贴了,呵呵。
ScAREcrOw_ss 2010-11-16
  • 打赏
  • 举报
回复
I try my best and finally return to my home.
zhazha6 2010-11-16
  • 打赏
  • 举报
回复
++i是先加后用,i++是先用后加的
finally2
main3
over3
喵爱旺 2010-11-16
  • 打赏
  • 举报
回复
基本功不行呀
SHX_520 2010-11-16
  • 打赏
  • 举报
回复
说实话自己在编译器里设断点调试一下是最好的方法...
SHX_520 2010-11-16
  • 打赏
  • 举报
回复
这题出得很好!
说明:++i的运算级别最高,遇到执行语句时都先执行它!
E:\t>javac Test.java
E:\t>java Test
finally 2 --首先try块抛出一个新异常ctach肯定捕捉执行return ++1,,此时i==1了;finally块无论如何都执行所以 输出++i ,由于++i运算级别最高所以先加后输出即i==2 结果为 finally2

main 3 --最后 return ++1//行100 先执行++i再到return 所以方法exception()的返回值就为3了(执行return后就结束上面catch的return就没有用);

over 3 --最后 return ++1//行100 先执行++i再到return 所以变量i的值就为3了。


去掉//行100结果
E:\t>javac Test.java

E:\t>java Test
finally 2 --跟上面的 finally 2 一样

main 1 --由于没有了 (行100 的return) 执行catch的return后就返回 1 了,所以方法exception()的返回值就为1了;

over 2 --因为下面输出语句还有一个++i 所以输出的值也就是变量i的值及i==2;

jayqean 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 clariones 的回复:]
说白了,估计很多人错在 return 和 finally的顺序上。
实际上,finally即不在return前执行,也不在return 后执行,而是在return 中执行。
具体说,return 语句执行时,先将返回值压栈,然后执行finally块,执行完毕后进行返回跳转,再从栈里得到的返回值,其实是finally执行前就压入的那个返回值。
[/Quote]
这就是 去掉 “行100”这行代码 为什么输出 main1 而不是main2 的解释
估计跟我一样错这的比较多
关于什么i++ ++i 这题 根本没扯上 有些人 还真是打酱油来着
gao89 2010-11-16
  • 打赏
  • 举报
回复
会了,就会被公司录用???
eggno8 2010-11-16
  • 打赏
  • 举报
回复
我是来拿走每日10分可用分的
walkman_22 2010-11-16
  • 打赏
  • 举报
回复
这种题目也有人能出的出来???
饭饭 2010-11-16
  • 打赏
  • 举报
回复
学习了....
clariones 2010-11-15
  • 打赏
  • 举报
回复
说白了,估计很多人错在 return 和 finally的顺序上。
实际上,finally即不在return前执行,也不在return 后执行,而是在return 中执行。
具体说,return 语句执行时,先将返回值压栈,然后执行finally块,执行完毕后进行返回跳转,再从栈里得到的返回值,其实是finally执行前就压入的那个返回值。
jxacc 2010-11-15
  • 打赏
  • 举报
回复
finally2
main3
over3
yaojianquansb 2010-11-15
  • 打赏
  • 举报
回复
关注一下,明天早上来学习,现在睡觉了。
wlw011_4444 2010-11-15
  • 打赏
  • 举报
回复
自己试下先
fable0115 2010-11-15
  • 打赏
  • 举报
回复
楼上很强大~~~~~~~~~~~~~~
javagongcheng 2010-11-15
  • 打赏
  • 举报
回复
看来我的基本功太差了 回家修炼去了..
cheng470 2010-11-15
  • 打赏
  • 举报
回复
唉,基本功不行
加载更多回复(40)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧