有return的情况下try catch finally的执行顺序

背景:

         昨天一个朋友出去面试,遇到这么一道题:“C#  catch里有return,finally里还执行吗?”

个人实践小结:

        1、不管有木有出现异常,finally块中代码都会执行
        2、当try和catch中有return时,finally仍然会执行。    

具体案例如下(此处以没有返回值的函数进行验证):

        

       3、如果是值传递,finally中改变的值对try或catch块中return返回的值无影响如果是引用类型参数(地址传递或对象),finally中的值改变对return会产生影响

具体案例:

      引用案例--数组类型:

        值案例--int类型:

        思考:string类型属于引用类型,那么它的返回值会受到finflly的影响吗?还是来看案例吧-----其实string与int类型的表现一样,不会受到finally的影响:

        思考:那么在finally中加上return,会产生什么影响呢?有图有真相:

        可见,finally中是不允许出现return的,否则连编译都过不去。

        

       

时间: 2024-08-03 07:53:02

有return的情况下try catch finally的执行顺序的相关文章

我的代码虽然写得很业余,但是没报错的情况下为什么连printf都执行不了。

问题描述 我的代码虽然写得很业余,但是没报错的情况下为什么连printf都执行不了. 要求从一个字符串里搜寻另一个字符出现的次数.下面是小白的代码. #include int main(int argc, const char * argv[]) { char hah[120],haha[120]; int i,j,num=0; printf("sting1 is "); gets(hah); printf("%sn",hah); printf("stri

解读IE和firefox下JScript和HREF的执行顺序_javascript技巧

很久都没有写关于代码方面的文章了.主要原因还是因为最近的工作都集中在需求分析方面,没有了现实中的感触,就没有了写作的动机.讨论一个关于JScript执行顺序的问题.示例代码如下: a.htm <A onmouseup="func('onmouseup')" href="b.htm">Click Me!</A> <A onclick="func2('onclick')" href="d.htm"&g

try catch finally的执行顺序深入分析_java

首先执行try,如果有异常执行catch,无论如何都会执行finally 一个函数中肯定会执行finally中的部分. 关于一个函数的执行过程是,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出. 但是当一个函数中出现finally以后,finally永远都要执行,所以,就算try或者catch中已经执行了return了,但是这时函数不会退出,不会告诉主函数去执行,而是等待finally执行完了才回去告诉主函数去执行,这时候如果

java方法什么情况下需要return null;语句

问题描述 java方法什么情况下需要return null;语句 不是void修饰的不用return语句么 什么数据类型修饰的可以这么写呢 8种基本数据类型不算吧,还是哪种引用数据类型呢 解决方案 除了返回类型为基本数据类型的情况,都可以这样写.一般是在确定了没有具体返回对象时返回null 解决方案二: 不是void修饰的一定要加return语句的 解决方案三: 使用void修饰的方法就是说明不需要返回值,所以可以不用return.当然return也可以用来结束这个方法

Ajax Hack 之hack 12不刷新浏览器的情况下向服务器提交text或textarea的值

ajax|服务器|浏览器|刷新 Ajax Hack 之hack 12不刷新浏览器的情况下向服务器提交text或textarea的值 本节主要讲的是:将text或textarea的值平滑地传递给服务器. 当用户输入text或textarea的值以后,Ajax能将这些值自动的发给服务器.程序等待text的onblur 事件,然后使用request对象向服务器发送数据.在常用的情况是,用户点击一个按钮,然后将 整个form作为一个大的数据包向服务器发送.服务器相应也与此类似.例如,在线测试或者 教程能

java-在无线模式存在的情况下,如何连接无线网络

问题描述 在无线模式存在的情况下,如何连接无线网络 我使用下面的代码在android手机上创建一个无线模式.出于某种原因它每次都会创建一个新模式,因此对于相同的无线网络手机将会有多个模式.是否有办法能实现当一个模式已经存在时,就不要再创建一个新的模式? public class IVMOBILEActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCre

Java事物回滚失效,在抛出异常的情况下仍然提交了SQL

问题描述 Java事物回滚失效,在抛出异常的情况下仍然提交了SQL private Connection connection; private Statement pre; public String set(String goal,String marriage){ return "update info set goal='"+goal+"'where marriage='"+marriage+"'"; } public void star

窗体-在不使用数据库的情况下,如何使用c#的winform ,将Excel导入到datagridview中

问题描述 在不使用数据库的情况下,如何使用c#的winform ,将Excel导入到datagridview中 小弟有个问题求教一下,如何将excel 文件放到VS的剪贴板中,再利用代码读取存储在剪贴板上的数据将其显示在winform的DataGridView中? 解决方案 C#操作EXCEL全解(代码) 提示:运行之前必须先引用Interop.Excel.dll模块 using System; using System.Collections.Generic; using System.Tex

高访问量情况下,在线人数的统计,比如腾讯 ?????????

问题描述 高访问量情况下,在线人数的统计,比如腾讯 ????????? 解决方案 java统计在线人数对于登录信息时使用session存储的,所以我这里是通过实现HttpSessionAttributeListener这个接口完成的. 1.实现接口类,在web.xml文件中配置监听类,从而可以使该类完成其工作. public class SessionListener implements HttpSessionAttributeListener { public void attributeA