| 异常介绍  我们平时在写代码或程序时,无意中(一般就是技术不够),而导致程序运行时出现意外(又称为异常),对于这个问题, C# 有专门的异常处理程序(当然其他语言也有)。   异常处理所涉及到的关键字有几个,不用说都知道,已经耳熟能详了:try、catch和finally等,用来处理失败的情况。当然,尽管这些操作也有可能失败,一般来说是释放,清理某些资源或记录日志等。   哪些代码会出现异常呢:使用的基类库 BCL、第三方类库和我们写的自以为是的代码,还有,可以使用 throw 显式抛出异常。     一种普遍出现的情形,异常很可能不是由代码直接引发,而是由调用堆栈中更靠下的位置其它方法所引发。在这种情形下下,CLR 会展开堆栈,并查找是否有包含针对你指定异常类型的 catch块的代码,如果找到的话,就会执行最先匹配的catch块。 如果在调用堆栈中的任意位置中,异常处理程序都没有找到合适(你写的)的catch块,就会自动终止该进程,并向用户显示(抛出)一条错误的信息。   在这里我写了一个被 0 处会出现异常(会显式引发 DivideByZeroException 异常)的示例;如果在执行的途中出现异常,则捕获该异常。  
  1         /// <summary>
 2         /// 除法
 3         /// </summary>
 4         /// <param name="x"></param>
 5         /// <param name="y"></param>
 6         /// <returns></returns>
 7         static double Division(double x, double y)
 8         {
 9             if (y == 0)
10             {
11                 throw new DivideByZeroException();
12             }
13 
14             return x / y;
15         }
16 
17         static void Main(string[] args)
18         {
19             //假设
20             double x = 250, y = 0;
21             
22             try
23             {
24                 var result = Division(x, y);
25                 Console.WriteLine($"result: {result}");
26             }
27             catch (DivideByZeroException e)
28             {
29 
30                 Console.WriteLine(e);
31             }
32 
33             Console.Read();
34         } Excetion 特点 
  所有异常类型都由基类 Exception派生。 使用 try块包围你认为可能会出现异常的代码。 一旦 try块中发生异常,控制流将按顺序找到与之关联的 catch,如果一直没有找到关联的,会引发最终的异常基类 Exception 内的处理程序(前提你已经 catch)。
 如果出现异常却没有对应的异常处理程序,则该程序将会停止执行,并抛出对应错误的信息。 在 catch定义了的异常变量,可以获取对应异常类型的有关信息,比如调用堆栈的状态和错误的说明,具体看 Excetion 的属性。 throw关键字可以显式引发异常。
 即使出现异常也会执行 finally块中的代码。 一般来说,我们会使用finally块释放资源。例如,关闭xx流。   
    
 
    
 |