c#基础语言编程-异常处理
2015-03-18 14:24
453 查看
异常的定义
异常就是程序中的运行时错误,当出现异常时,系统会捕获这个错误并抛出一个异常。若程序没有提供处理该异常的代码,系统会挂起这个程序。常见异常的类型
System.Exception 最泛化的异常,其他所有异常类型都从它派生。System.ArgumentException: 传给方法的一个参数无效。
System.ArgumenNullException: 一个不应该为null的参数为null。
System.ApplicationException: 一个自定义的应用程序异常,开发者可以用它标识特殊的非致命的应用程序错误。
System.FormatException:参数格式不符合调用的方法的参数规范。
System.IndexOutOfRangeException:试图访问一个不存在的数组元素。
System.NotImplementdeException:虽然找到了方法签名,但该方法尚未完全实现。
System.NullReferenceException:试图访问尚未包含任何数据的一个变量(一般是调用其值为null的一个对象的成员是引发)。
System.ArithemeticException: 发生了一个无效的数学运算,但其中不包括被零除。
System.StackOverFlowException:通常意味着一个无限循环,方法不停地回调自身(成为递归)。
异常处理过程
(1)BCL定义了许多类,每个类代表了一个指定的异常类型。当异常发生时,CLR首先创建给类型的异常对象,然后,寻找适当的catch子句处理异常。(2)若异常在一个没有被try语句保护的代码中产生或若try语句没有匹配的catch子句,系统将按顺序搜索调用栈,寻找匹配的处理代码。
异常处理语句
try { //可能出现异常的代码!! //在try块中的代码,如果一旦某句代码发生了异常,这从该条语句直接跳转到catch 块中,在try 块中该条语句后续的代码不会继续执行了。 } catch { //当try块中的代码发生异常后,执行这里的代码 //如果try块中的代码没有发生异常,这不会执行catch 块中的代码 } finally { //无论try块中的代码是否发生异常,都会执行这里的代码 ,比如资源释放,因为无论程序执行是否发生异常都需要释放资源。 }
static void T1() { try { Console.WriteLine("正常1"); //====引发异常代码===== int n = 10, m = 0; Console.WriteLine(n / m); ///====引发异常代码===== Console.WriteLine("正常2"); return; Console.WriteLine("正常3"); } catch (Exception) { Console.WriteLine("溢出1"); //主动向上抛出异常时 throw; } finally { //虽然try块中有return语句,但是finally中的代码依然会执行,并且是在return 语句之前执行的。Console.WriteLine("最终1"); } }
当异常代码注释时;
输出:正常1,正常2,最终1.
当异常代码取消注释时;
输出:正常1,溢出1,最终1.
其中有return,但这个对finally不管用,最终还是执行。
当发生异常后,就从异常代码直接跳转到catch语句中,异常代码后的代码不再执行,执行catch后,再执行finally语句。
程序可以使用 throw 关键字显式地引发异常。也可throw new argumentexception等手动抛出异常。
常见的问题
1、什么时候该异常处理?1)代码最外层,如WinFrom,避免用户看到内部异常信息用户体验不好,或者造成程序崩溃,可以用log4net之类的框架记录异常。
2)遇到异常需要恢复状态或者重试的地方。例如连接数据库偶然失败了,可以有个重连机制,在Catch块重新连接数据库。
3)对于一系列有可能失败的任务,其中有一个任务失败,不想影响到其他任务。例如要上传100张图片,不想因为一张图片上传发生异常而失败,进而终止整个上传任务,仅需要记录下失败的图片,提醒用户重传即可。
2、异常处理需要注意的地方
1)Catch和Finally代码应该非常短,而且成功率极高,避免自己又抛出一个异常。否则CLR会终止进程,避免安全漏洞或者不可预知的后果。这个类似于Windows蓝屏,发生了严重的错误,宁愿使系统不可用。
2)Catch块尽量避免直接捕捉异常的基类Exception,而应该捕捉具体的异常类。
相关文章推荐
- C# .net编程基础-try-catch异常处理-阶乘示例
- 2、C#编程基础(一)——变量、常量、异常处理
- C# .NET编程基础-throw异常处理-Email格式检测示例
- c#基础语言编程-常用函数
- c#基础语言编程-多态
- c#语言基础编程—string
- C#基础知识梳理系列十:异常处理 System.Exception
- MSDN-C#编程指南-笔记-(二)-C#语言基础
- c#基础语言编程-Path和Directory
- c#基础语言编程-按值类型和引用类型传递参数
- (C#基础)异常处理二三事
- c#语言基础编程—string
- 学习笔记之C#类、循环中的语句、基础知识和异常处理
- c#基础语言编程-集合
- c#基础语言编程-Path和Directory
- c#基础语言编程-常用函数
- (C#基础)异常处理二三事
- C#基础知识梳理系列十:异常处理 System.Exception
- 黑马程序员之C#编程基础学习笔记:将一个整数数组的每一个元素进行如下的处理:如果元素是正数则将这个位置的元素的值加1,如果元素是负数则将这个位置的元素减1。
- c#语言基础编程-转义符