【Java】try.catch语句中存在return和finally中语句的执行顺序?

6841

结论:

redis String类型的数据类型,是二进制安全的,那么我们如何理解这个二进制安全呢?

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语句,那么程序就结束了。


特别声明:本文仅供交流学习 , 版权归属原作者,并不代表游民部落赞同其观点和对其真实性负责。若文章无意侵犯到您的知识产权,损害了您的利益,烦请与我们联系vmaya_gz@126.com,我们将在24小时内进行修改或删除。

相关推荐:

教程推荐