一.try ... catch ... finally
try
{
......
}
catch (<exceptionType> e)
{
...
包含抛出异常时要执行的代码
finally
{
...
包含总是会执行的代码
}
在try 块的代码中出现异常后,发生的事件依次是:
try 块在发生异常的地方中断程序的执行。
如果有catch 块,就检查该块是否匹配已抛出的异常类型。如果没有catch 块,就执行finally
块(如果没有catch 块,就一定要有finally 块)。
如果有catch 块,但它与已发生的异常类型不匹配,就检查是否有其他catch 块。
如果有catch 块匹配已发生的异常类型,就执行它包含的代码,再执行finally 块(如果有)。
如果 catch 块都不匹配已发生的异常类型,就执行finally 块(如果有)。
2.throw
Throw会抛出/传递异常,通过在catch块里使用throw语句.可以改变产生的异常,比如我们可以抛出一个新的异常,throw语句有各种各样的,并且很有必要。可以是重复抛出,也可以是显示信息,或者产生新的异常。
throw会主动将程序停止,并提示程序员错误内容。
using System;
class Program
{
static void Main()
{
try
{
A();
B();
C(null);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
static void A()
{
// Rethrow 语法.
try
{
int value = 1 / int.Parse("0");
}
catch
{
throw; //抛出刚才已经发生过的异常
}
}
static void B()
{
// 过滤异常类型.
try
{
int value = 1 / int.Parse("0");
}
catch (DivideByZeroException ex)
{
throw ex;
}
}
static void C(string value)
{
// 创建新的异常.
if (value == null)
{
throw new ArgumentNullException("value");
}
}
}