异常处理基础(C#参考)

来源:互联网 发布:java图片上传跨域请求 编辑:程序博客网 时间:2024/05/22 14:52



throw

  

  throw语句用于发出程序执行期间出现的反常情况(异常)的信号

  引发的异常是一个对象,其类派生自System.Exception

  

try-catch


  一个try块后面接了一个或者多个catch子句,这些子句指定不同异常的处理程序。

  try块中包含可能导致异常的代码。将执行此块,直至引发异常或成功运行。


  例:强制转换null对象会引发NullReferenceException异常

object o2 = null;try{    int i2 = (int)o2;   // Error}
   尽管可以不带参数使用catch子句,但不推荐这种用法。一般情况下,只应捕获知道如何恢复的异常。

  so,应该始终指定派生自System.Exception的对象参数。如:

catch (InvalidCastException e) {}

  

  try-catch语句中可以有多个特定的catch子句。在这种情况下,catch子句的顺序很重要,因为catch子句是按顺序查找的。使用更笼统的子句之前应该有更针对性的异常。
  筛选想要处理的异常的一种方式是使用catch子句。也可以使用if进一步检查该异常,决定是否要对该异常进行处理,如果返回值为false,则继续查找合适catch子句异常处理程序。

Catch (ArgumentException e) if (e.ParamName == “…”){}
  

  可在catch块中使用throw语句以重新引发已由catch语句捕获的异常。如:从IOException异常提取信息,然后向父方法抛出

catch (FileNotFoundException e){    // 这个方法处理FileNotFoundExceptions异常}catch (IOException e){    // 从这个异常中提取部分信息,然后抛给父方法    if (e.Source != null)        Console.WriteLine("IOException source: {0}", e.Source);    throw;}

  还可以捕获一个异常然后引发一个不同的异常。不过作为捕获的异常最好是内部异常,引发的异常最好是自定义异常

  在try块内,仅初始化在其中声明的变量。否则,在完成执行块之前,可能会出现异常。


  如:变量n在try块内初始化,在try块外使用write方法输出n,将生成编译器错误。

static void Main() {    int n;    try     {        // 不要在这里初始化这个变量        n = 123;    }    catch    {    }    // 错误:使用了未赋值的局部变量n    Console.Write(n);}

try-finally


  使用finally块,可以清理在try中分配的任何资源,而且,即使在try块中发生异常,也可以运行代码。


  已处理的异常中会确保运行关联的finally块。

  如果异常未处理,则finally块的执行取决于如何触发异常展开操作。


try-catch-finally


  catch和finally一起使用的常见方式是:在try块中获取并使用资源,在catch块中处理异常,并在finally块中释放资源

public class EHClass{    void ReadFile(int index)    {        string path = @"c:\users\public\test.txt";        System.IO.StreamReader file = new System.IO.StreamReader(path);        char[] buffer = new char[10];        try        {            file.ReadBlock(buffer, index, buffer.Length);        }        catch (System.IO.IOException e)        {            Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);        }        finally        {            if (file != null)            {                file.Close();            }        }    }}


  


2 0
原创粉丝点击