try{}catch{}finally{}返回结果

下面这段代码的i的值为什么是8?

int i=1;
try{
 int a=1000/0;
return i;
}catch(Exception e){
  i=8;
return i;
}finally{
  i=0;
}

除以零会抛出异常,所以就到了catch里

你把finnaly的i=0,后面加个return i;应该就知道怎么回事了

首先程序是按顺序执行的,
catch之后的顺序为
①i=8;
②return i;
③i=0;
可以翻译成
①i=8;
②return = i; //执行到这里,返回值已经赋值完毕,后续对i的更改不会影响return的值。
③i=0;


如果是下面这样的话,就不符合逻辑了
①i=8;
②return i;//跳过
③i=0;//到这里程序已经执行完毕了,不会再跑回之前的地方去找return语句。
④return i;
Java规范里没有写return必须最后执行,所以我理解是顺序执行。

img