【Java】try.catch语句中存在return和finally中语句的执行顺序?
6322
结论:
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语句,那么程序就结束了。