Java面试题 try.catch语句中存在return和finally中语句的执行顺序?

Java中的try.catch语句中的finally和return同时存在时,finally语句是否会执行,若执行,那么执行顺序是什么?

结论:

  1. 不管有没有异常,finally块中代码都会执行;
  2. 当try.catch中有return时,finally仍然会执行;
  3. finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
  4. 在执行时,是return语句先把返回值写入内存中,然后停下来等待finally语句块执行完,return再执行后面的一段。
  5. 至于返回值到底变不变,当finally调用任何可变的API,会修改返回值;当finally调用任何的不可变的API,对返回值没有影响。

举例:

1、try{}catch(){}return;

按照正常的顺序执行并返回。

2、try{return;}catch(){}finally{}return;

程序执行try代码块中return之前的代码,再执行finally块,最后执行try中的return,finally后的return将不再执行。

3、try{ } catch(){return;} finally{} return;

程序执行try代码块中的代码,

  • 没有异常:执行finally中的代码,再执行return。
  • 发生异常:执行catch中return之前的代码,再执行finally语句中的代码,再执行catch中的return,finally后的return将不再执行。

4、try{return;}catch(){} finally{return;}

程序执行try代码块之前的代码,再执行finally语句块,因为finally中有return,所以try中的return将不再执行。

5、try{} catch(){return;}finally{return;}

程序执行try代码块中的代码,

  • 没有异常,直接执行finally并执行finally中的return执行结束;
  • 发生异常,执行catch代码块中retrun之前的代码,再执行finally块中的代码,由于finally中有return则直接返回,所以catch中的return将不再执行。

6、try{ return;}catch(){return;} finally{return;}

程序执行try代码块中return之前的代码,

  • 没有异常:执行finally中的语句,由于finally中有return则直接返回结束程序。
  • 发生异常:执行catch块中return中的语句,再执行finally语句,由于finally中有return则直接返回结束程序。

最终结论:任何try或者catch中的return语句之前,如果finally存在的话,都会先执行finally语句,如果finally中有return语句,那么程序程序就结束了。

猜你喜欢

转载自blog.csdn.net/weixin_44296929/article/details/108339440