有同学问我说,如果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中改变后的该属性的值。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)