msg是字符串类型.. +表示连接.
t.foo(0).msg运行过程:
因为i=0,false 不执行语句,没有异常抛出. 执行下一句 c.msg+="1";
finally 中的语句必须执行的. 执行c.msg+="3";
再顺序执行下一句 c.msg+="4";
最后 return c;
输出134
t.foo(1).msg运行过程:这时i=1,执行throw new Exception(); 异常抛出,
跳转 执行 catch语句,c.msg+="2",
下一句虽然是 return c; 但是finally是必须执行的,所以先执行 finally中的语句 c.msg+="3";
再回去执行 return c;
方法结束
由于之前msg的值是134 后面继续连接上23
就是13423
输出 12323
这题虽然刚没看懂..倒腾了半天..通了
总结:
不论 语句位置 位置如何.
finally会在 return之前执行. |