前一段时间一直在参加各种公司的面试,面了很多家,也有几家自己觉得很不错的,准备5.1后从中挑一家准备入职了。职业生涯下一段的开始。在下一段工作开始前,有一段空闲时间。然后,就总结了以下那些奇奇怪怪的笔试题,想好好的分析下这类笔试题背后的运行原理。闲话不多说,直接上代码。其中有一道笔试题如下:
请问,以上代码输出的是多少?
我当时按照我所知道的原则————finally块总是会执行的去判断,模棱两可的回答了,返回的是2。后面回到房间,由于好奇,自己在机器上跑了下,发现其实输出的是 9 。 于是就更好奇了。有以下两个疑问:
1 ) 难道 try中的 return 语句没用执行 ?
2 )或者是 try中的return 语句已经执行了,但是后面有finally,于是等待finally执行,然后在finally中返回了?
带着这两个疑问,去查阅了相关资料。刚好近期自己在看《深入理解Java虚拟机》,以及研究字节码方面的内容。
查阅Java语言规范得知,即使 try 中有 return 语句,在return 前,先回去执行 finally 里面的内容。如果 try 和 finally 中都有 return 的话, 那么是 先 执行