异常是程序中的运行时错误,它违反了一个系统约束或应用程序约束,或出现了在正常操作时未预料的情形。
如果程序没有提供处理该异常的代码,系统就会挂起该程序。
try语句
try语句用来指明被异常保护的代码块,并提供代码以处理异常,如果它们发生的话。try语句有三个部分组成。
1.try块包含被异常保护的代码。
2.catch子句部分包含一个或多个catch子句。这些事处理异常的代码块。它们被称为异常处理程序。
3.finally块含有在所有情况下都要被执行的代码,无论有没有异常发生。
异常类
BCL定义了许多的异常类,每一个类代表了一个指定的异常类型。所有异常类都从根本上派生自System.Exception类。
当一个异常发生时,CLR会创建该类型的异常对象,并且寻找适当的catch子句以处理异常。
异常对象含有只读属性,带有该异常的信息。
常用的属性如下:
Message 该属性含有解释异常原因的信息。
StackTrace 该属性含有描述异常发生在何处的信息。
InnerException 如果当前异常是由另一个异常引起的,该属性包含前一个异常的引用
Source 如果没有被应用程序定义的异常设定,那么这个属性含有异常起源所在的程序集名称
catch子句
catch子句处理异常,它有3种形式,允许不同级别的处理
1.一般catch子句
在catch关键字之后没有参数列表;匹配try块中引起的任何类型的异常
catch
{
Statements
}
一般catch子句在catch子句中只允许有一个。一般catch子句能接受任何异常,但不能确定引发的异常类型,这只允许对任何可能发生的异常的普通处理和清理。使用一般catch子句是不好的,它通过让程序继续执行隐藏错误,让程序处于一种为止的状态。
2.特定catch子句
带有异常类的名称作为单一参数;匹配任何该名称类型的异常
catch(ExceptionType)
{
Statements
}
特定catch子句形式把一个异常类的名称作为参数。它匹配该指定类或派生自它的异常类的异常。
3.带对象的特定catch子句
在异常类名称之后包括一个标识符;该标识符在catch子句中相当于一个本地变量,并被称为异常变量;异常变量引用异常对象,并能被用于访问关于该变量的信息。
catch(ExceptionType ExceptionVariable)
{
Statements
}
带对象的特定catch子句提供最多的关于异常的信息。它匹配该指定类的异常,或派生自它的异常类的异常。它还给出一个异常实例,称为异常变量,它是一个对CLR创建的异常对象的引用。可以在catch子句块内部访问异常变量的属性,以获取关于引起异常的详细信息。catch子句中允许有多个。
catch子句排序
1.特定的catch子句必须以一种顺序排列,最明确的异常类型第一,直到最普通的类型。
2.如果有一个一般catch子句,它必须时最后一个,并且在所有特定catch子句之后。