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

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

catch 块必须按照最具体到最不具体排列。

finally块:只要控制离开try块,finally块就会执行,最适合用来执行资源清理。

规范:

要优先使用try/finally 而不是try catch块来实现资源清理代码。

要在抛出的一场中描述异常为什么发生,如有肯那个,还要说明如何防范。

避免捕捉无法获知其正确行动的异常,对这种异常不进行处理比处理的不正确要好。

 

有时catch块能够捕获到异常,但不能正确或者完整的处理它,在这个时候可以让这个catch块重新引发异常,方法是使用一个单独的throw语句,不在其后面指定任何异常。不指定exception变量所引用的异常,从而保持了异常中的“调用栈”信息,而throw exception将之前的信息替换成当前调用栈信息。而调试时一般需要知道原始调用栈。

规范:

要在捕捉并重新引发异常时使用空的throw语句,以便保持调用栈。

要通过引发异常而不是返回错误码来报告执行失败。

不要让公共成员将异常作为返回值或者Out参数。要通过异常来指明错误,不通过他们作为返回值来指明错误。

避免使用异常处理来处理意料之中的情况。异常是专门为了跟踪例外的,事先没有预料到的,而且可能造成严重后果的情况而设计的。

通常,开发者必须假定用户会采取非预期的行为,所以应当防卫性地编写代码,提前为所有能想到的“愚蠢的用户行为”拟定对策。

异常处理会带来毫秒级的性能损失。

使用TryParse()来执行数值转换。

if(int.TryParse(ageText,out age))

{

//TryParse方法返回bool值,所以要求使用out关键字在转换成功的情况下返回转换结果。

}

这样就避免了对于类型转换的异常处理。在CLI2.0版本中为所有数值类型都实现了这个方法

转载于:https://www.cnblogs.com/crz2014/p/4321946.html

你可能感兴趣的文章
实时的.NET程序错误监控产品Exceptionless开源了
查看>>
PAT 甲级 1104 sum of Number Segments
查看>>
oracle表空间创建与用户授权
查看>>
使用用Generic.xaml加载默认的主题资源
查看>>
JavaScript高级编程——Array数组迭代(every()、filter()、foreach()、map()、some(),归并(reduce() 和reduceRight() ))...
查看>>
poj 3070 Fibonacci 矩阵快速幂
查看>>
网桥知识点学习
查看>>
Android动态改变工程依赖
查看>>
for循环变量声明为 final
查看>>
对法拉奇的看法
查看>>
linux3.4.2之DMA驱动完整程序
查看>>
AC自动机(转载)
查看>>
用IrisSkin2.dll美化你的WinForm --zt
查看>>
[leetcode](4.21)3. 最长重复子串
查看>>
ASP.NET MVC 实现与SQLSERVER的依赖缓存
查看>>
run()和start()的区别
查看>>
Windows高手纯键盘操作
查看>>
zoj 2339 Hyperhuffman 哈夫曼编码 (4-C)
查看>>
【Git版本控制】git中reset命令的详解
查看>>
Ultimate SEO URLs静态网址时标点符号自动忽略,如何解决?
查看>>