public int testException() { int i = 0; try { i++; throw new Exception("error"); } catch (Exception e) { return i++; } finally { i++; } }
以上方法被调用后,返回值是多少
说一下我的理解:catch块中的:return i++;相当于:return i ; i++; 两步。但是在执行return i;之后,不会真正的return,即只是会将结果 i 保存在一个临时栈中,接着执行finally中的语句,最后才会从临时栈中取出之前的结果返回。同理,finally中的语句不会影响到返回的 i 的值,因为要返回的值已经存到临时栈,不会再被更改了。以上是我对该题的理解,欢迎大家批评指正!
如果将代码改成:
public int testException() { int i = 0; try { i++; throw new Exception("error"); } catch (Exception e) { return ++i; //将原来的 i++ 改成了 ++i } finally { i++; } }
最终输出结果是 i = 2分享一个总结的比较清楚的博客:https://blog.csdn.net/ns_code/article/details/17485221