关于finally的一些认知
来源:互联网 发布:nginx 使用内存缓冲 编辑:程序博客网 时间:2024/05/17 04:08
简介:相信大家在开发中都能使用很好的处理异常,那么避免不了和try catch finally 接触,慢慢的发现了下面的几个问题,开发环境是vs2010 +reshaper,当你想使用代码块时,智能提示会提示try和tryf两种,那么这两种代码块有什么样的区别那,还有就是c#中的return是结束当前执行的方法,那么如果我们在使用try catch finally时,在try代码块和catch代码块中都return;一下,那么finally中的代码还会执行吗,如果执行的话,如果return 后面是调用一个方法,那么return后面的方法中的代码和finally中的代码那个先执行那,下面带着这两个问题,我们来弄两个小例子
1.第一个例子,来说明try ,tryf的区别
当我们键入try 回车时,vs会添加以下代码,
try
{
}
catch (Exception)
{
throw;
}
上面的这种方式,主要适用于处理托管资源的异常处理,不需要在finally中关闭连接等操作
当我们键入tryf 回车时,vs会添加以下代码
try
{
}
finally
{
}
那么这种异常处理,适用于哪种情况那,按说出现了finally应该是用来释放占用资源的处理吧,可这种方式,真的能释放资源吗,答案是否定的
我认为智能提示的作用是用来提高开发人员的额开发效率的,但是如果提示的代码块可能包含某些可能存在的错误的话,这种智能提示还是不要有的好,因此,我们也可以总结出,在c#的开发中如果我们要使用异常处理,有以下两种参考方式,
try
{
}
catch (Exception)
{
throw;
}
或者
try
{
}
catch (Exception e)
{
}
finally
{
}
前一种解决是托管资源的异常,后一种解决是非托管资源的异常,第一个?,就到这里吧,多说一句,之所以会出现上面的疑问,大家自己可以尝试着上面3种可能的异常处理多级嵌套试试,就知道为什么建议用后两种方式了
2.第二个例子
首先我们先来解决第一个疑问,
上代码
从上面2个图可知,try,catch中return了,finally中的代码执行了,第一个小疑问,解决,注意finally中是不允许出现return的,编译都通不过,
再多想一个问题,如果代码修改如下:
可以看出try,catch中的return对finally中的代码的执行时没有影响的,但是对后面的代码时起作用的
接下来,我们解决第二个小疑问
代码
从图中看出现执行了return 后的testvoid方法,后自行了finally中的代码,第二个问题解决
- 关于finally的一些认知
- 关于SSH结合的一些认知
- 多维数组关于指针的一些认知
- 关于c# lambda的一些认知
- 关于UnityEngine.Network的一些浅显认知
- 关于finally语句的一些小秘密
- 关于自己的一些不为认知的想法
- 关于自己的一些不为认知的想法
- MySQL的一些认知
- 关于大数据和NoSQL和的一些片面认知
- 关于ajax跨域问题的一些认知
- 关于android APP 架构的一些认知和理解
- 关于CoreData的认知
- C#中关于try...catch...finally的一些技巧
- java关于final,finally和finalize的一些理解
- 关于try,catch,finally的一些简单实例
- 关于finally的几个问题
- 关于finally的使用
- 基础网络概念(十)重点回顾
- Android开发框架介绍
- 第十六周 Problem D:指针引出奇数因子
- numpy for windows python 2.7 下载
- boost::format
- 关于finally的一些认知
- Memcache集群环境下缓存解决方案
- ubuntu 14.04 忘记用户密码的解决办法
- 两个复数的 和,差
- 关于ios系统cocos2dx背景音乐不播放的bug
- Codeforces 2A. Winner(字符串:模拟)
- Java JDBC连接各种数据库的配置方法
- 幸福无关他人,只需忠于自己
- linux之SQL语句简明教程---CREATE VIEW