今天被熊哥一段代码给搞懵逼了,废话不多说,上代码~~~
图中的代码执行之后返回的结果是什么?,当时我回答的是2,但群里的大佬们有几个说是1,看了一篇博客,由于没看完整所以自己的立场就动摇了。下面是博客的地址:http://m.blog.csdn.net/kavensu/article/details/8067850
然后到家之后就按照之前说的方式写了一下,结果返回的确实是:2
codeTwo.png
这证明了我说的答案是对的。于是在熊哥的指导下换了几种调试方式,可谓是从懵逼到懵逼再到明白~
第一次调试代码如下:
codeThree.png
第一次把try语句中的return关键字给去掉了,返回结果是finally语句块中return的2。
excuse me?!try中的c=1/0,算术错误哇,为什么没有返回catch语句块中的1呢?带着疑问继续进行调试第二次调试代码: codeFour.png
这次我们多加了一个b()方法,把之前的int c=1/0给去掉,在b()方法中返回2,我们再来看看打印结果: codeFive.png
打印结果结果如上图,黑人问号脸.png明明b()方法走了,但为什么返回的值却不是2呢?(注意:此段代码和上面返回的结果return的值已经修改!!!)但即使这样,那返回的结果也应该是b()方法中的2哇,为什么回事finally语句块中的3呢?
下面就来了我们的第三次调试:
codeSix.png
这次我们finally语句块中的return给注释掉看看什么结果: codeSeven.png
这次终于是我们想看到的值了,可是为什么要把finally语句块中的return注释掉之后才会得到我们想要的值呢?
引出今天结论:try语句块里面有代码和return并且finally里也有return的话,执行try里的代码try中的return并不会马上执行而是把值保存起来,然后就跳到finally里了,因为finally里有return,所以就直接retun了,如果finally里没return的话,会跳回到try里return。总之,finally语句块是必须要执行的。 Tom.jpg
感谢熊哥悉心指导,也谢谢篇头的博主~~~
网友评论