博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
try catch异常处理
阅读量:5750 次
发布时间:2019-06-18

本文共 798 字,大约阅读时间需要 2 分钟。

try catch
clr自上而下搜索匹配的catch块,一个try块对应多个catch块,越具体的catch应该在上面,接着是她们的基类型,最后是exception类,未指定也是exception类型。如果上下顺序反了,那么具体的catch块会执行不到,编译器会报错。
try catch 以后,如果只是处理了捕获的异常(例如记日志),没有抛出异常(throw),后续代码会继续执行
throw是抛出一个异常,中断执行后续代码,如果一个方法可能会有异常,但你不想处理这个异常,就是用throw,谁调用了这个方法谁就要处理这个异常,或者继续抛出。
throw和throw ex
1 throw ex 抛出与catch捕捉到的相同的异常对象,导致clr重置该异常的起点。认为你catch到的异常已经被处理了,只不过处理过程中又抛出新的异常,从而找不到真正的错误源 try{ }catch (Exception ex){ throw ex; }
2 throw 重新抛出异常对象,clr不会重置起点(推荐使用这个)try{} catch{ throw;}
3 或者对异常就行重新包装,保留原始异常点信息,然后抛出
finally:
无论代码有没有抛出异常,finally块始终会执行。应该先用finally块清理那些已经成功的操作,还可以用finally显示释放对象避免资源泄露。
使用了 lock,using,foreach的语句,c#编译器会自动加上try finally块,并在finally中自动释放资源
可以在一个线程中补获异常,在另外一个线程中重新抛出异常;
clr在调用栈中向上查找与抛出的异常对象类型匹配的catch块,没有任何catch块匹配抛出的异常类型,就会发生一个未处理的异常

转载于:https://www.cnblogs.com/shaner/p/6295319.html

你可能感兴趣的文章
【许晓笛】从零开始运行EOS系统
查看>>
【跃迁之路】【460天】程序员高效学习方法论探索系列(实验阶段217-2018.05.11)...
查看>>
C++入门读物推荐
查看>>
TiDB 源码阅读系列文章(七)基于规则的优化
查看>>
Spring之旅第八站:Spring MVC Spittr舞台的搭建、基本的控制器、请求的输入、表单验证、测试(重点)...
查看>>
数据结构与算法——常用排序算法及其Java实现
查看>>
你所不知的Webpack-多种配置方法
查看>>
webpack+typescript+threejs+vscode开发
查看>>
python读excel写入mysql小工具
查看>>
如何学习区块链
查看>>
搜索问题的办法
查看>>
微信分销系统商城营销5大重点
查看>>
求职准备 - 收藏集 - 掘金
查看>>
Linux-Centos启动流程
查看>>
php 设计模式
查看>>
后端技术精选 - 收藏集 - 掘金
查看>>
Laravel 服务容器
查看>>
mac安装kubernetes并运行echoserver
查看>>
多页架构的前后端分离方案(webpack+express)
查看>>
算法(第4版) Chapter 1
查看>>