管理错误和异常

来源:互联网 发布:日本矮黑人种 知乎 编辑:程序博客网 时间:2024/05/16 13:04

一、异常处理
    程序可能出错,有许多产生错误的原因,程序员是无法控制的,所以,任何应用程序都必须有能够检测错误、并能采用得体的方式来处理它们。
    在C#里面,利用异常和异常处理程序,可以很容易地将用于实现程序主逻辑的代码与错误处理代码区分开。为了写一个支持异常处理的应用程序,需要做两件事情:
     1.代码要放到一个try块中。
     2.在try块后要紧跟着一个或多个catch块以捕捉可能发生的错误。catch块就是对异常进行处理的程序。
     如果调用方法没有使用try块或者try之后没有找到匹配的catch块,那么一旦出现异常,程序将停止运行。解决这种问题的方法是:
     1:使用多个catch处理程序,针对不同的异常,写不同的catch块,如                   

               try               {}               catch(FormatException fEx)               {}                catch(OverflowException oEx)               {}
     2:捕捉多个异常,用catch(Exception ex)可以捕捉任何异常
     一般情况下,是将捕捉所有异常的catch放在catch群得最后一个,保证异常能够得到捕捉。而还存在一个问题,如果异常与多个catch处理程序匹配,其将运行由“运行时”发现的第一个catch处理程序。
      要记住的一个重点是,当异常抛出后,会改变程序的执行流程。这意味着你不能保证当一个语句结束之后,它后面的一个语句肯定会运行,因为前面一个语句可能抛出异常,这时可以将一定要执行的语句(如关闭流)放到finally块中,在这个块中,无论是否前面有异常抛出,都会得到执行。
二、使用checked和unchecked整数运算
      
举例,int固定为32位,其支持的取值范围是-2147 483 648~2147 483 647。如果当前值是2147 483 647,加1就会溢出。如何避免或者检测出这种溢出的风险?

     1、为了启动或者禁止溢出检查,可设置项目属性,项目>>“项目”属性(“项目”是指名称)>>单击生成标签>>单击右下角的“高级”按钮,在随后出现的“高级生成设置”对话框中,勾选或者清除“检查运算上溢/下溢”选项。

     2、使用checked和unchecked关键字选择性打开或者关闭程序的一个特定部分的整数溢出检查。
     checked语句是指以checked关键字开头的一个代码块。checked语句中任何整数运算溢出,都会抛出一个OverflowException异常,如下例所示:
                    int number = int.MaxValue;                    checked                    {                        int willThrow = number++;                        Console.WriteLine("永远都执行不到这里");                    }
       注意:只有直接放在checked块中的整数运算才会得到溢出检验,加入块中有方法调用,方法中的溢出是见车不到的。
       还可以使用unchecked来创建一个强制不检查溢出的语句块。一个unchecked块中的所有整数运算都不会检查,永远不会抛出OverflowException异常。例如:
                    int number = int.MaxValue;                    unchecked                    {                        int willThrow = number++;                        Console.WriteLine("能执行到这里");                    }


 
                   

原创粉丝点击