main中的静态方法开始执行,走到if(names[1].equals("tom"))
由于names[1]未创建对象出现空指针报错,转到catch(NulIPointerException e)
,但由于finally一定最后执行,所以最终返回的是finally中的4,而不是catch(NulIPointerException e)
中的3…
结果:
4
同上对象出现空指针报错,转到catch(NulIPointerException e)
,此时i=3应return 3,但由于需要执行finally中的内容,所以底层将return 的值3存入临时变量,限制性finally中的语句,输出i=4
,接着return 3,在main中输出3。
结果:
i=4
3
“进入方法A”之后,会将抛出的异常给到main中的catch,但首先还要执行“用A方法的finally”
结果:
进入方法A
用A方法的finally
制造异常
进入方法B
调用B方法的finally