首页  >  编程教程  >  编程问答  >  try…catch…finally语句中return语句什么时候被执行?

try…catch…finally语句中return语句什么时候被执行?

有同学问我说,如果try…catch…finally语句含有return语句,那return语句什么时候被执行?


任何语句执行都要在return语句之前,这是因为return语句是用来跳出当前函数的。


try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句。


在执行try或catch语句块中的return语句时,假如finally语句块有return语句,则会先执行finally语句块,finally语句块的return会覆盖其他地方的return,需要注意的是,finally语句块不能通过重新给变量赋值的方式来改变return语句的返回值,每一个方法的变量都存储在栈中,前面try或者catch语句的返回值都放在栈里面,但有finally语句时,不会立即返回,而是将finally语句的返回值入栈,然后返回。


即便catch语句有return,也会先执行finally语句,finally语句先于catch语句执行,在finally语句中的return语句会抑制try语句和catch语句中的语句,所以不要在finally语句中使用return,不要再finally语句中抛出异常,不要拿finally语句中干其他事情。


如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。


如果finally中没有return语句,但是改变了要返回的值,分为以下两种情况:

1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。

2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。



本文固定URL:https://www.dotcpp.com/qa/54

编程杂谈
编程基础
知识答疑