t.foo(0).msg运行过程:
因为i=0,执行c.msg+="1";这时没有发生异常,跳过catch,运行finally, c.msg+="3";最后执行 c.msg+="4";
所以结果为134;
t.foo(1).msg运行过程:这时i=1,执行if(i==1)throw new Exception();, c.msg+="1"; 这个没有执行,异常抛出,
执行catch语句,c.msg+="2",因为有return c; , c.msg+="4"; 就不执行了,但finally是必须执行的, c.msg+="3"; 会运行。
因为t.foo(0).msg 已经运行过,所以在t.foo(1).msg 运行时,接着上次的运算结果继续运算。
所以结果是13423,而不是23;
|