关于这个问题,其实根据分析它的每一步便可一目了然:
1、当d.methodB(1)执行时,便可进入
try {
return methodA(money);
}
2、由于返回methodA(money);所以此时将1传递给了函数methodA中的参数money,
根据--money,所以if满足条件:
if(--money<=0){
throw new Exception("Out of Money");
}
直接抛出了一个异常,而抛出的这个异常又被函数methodB中的catch捕获,按理说应该最后返回-100;为什么会这样呢?我们都知道,finally{}是无论程序如何都要被执行的代码块,所以根据最后执行结果,最后返回的只能是finally{return 100}中的100;要不如果直接返回-100的话,那么如何保证finally{}代码块必须执行呢。所以这是第一个100的结果。
3、接下来分析d.methodB(2),由以上可知,--money<=0即(1<=0)不满足条件,所以直接返回1,并将1直接又交给methodB的返回值,同理,由于finally{return 100}还是必须要执行的代码块,所以第二个100还是finally内部的返回值100。
|