try-catch语句由一个try块后跟一个或多个catch子句构成,这些子句指定不同的异常处理程序。
try 块包含可能导致异常的保护代码。该块一直执行到引发异常或成功完成为止。
catch 子句使用时可以不带任何参数,这种情况下它捕获任何类型的异常,并被称为一般 catch 子句。它还可以接受从 System.Exception 派生的对象参数,这种情况下它处理特定的异常。例如:
try
{
// 除数不能为0
int x = 0;
float y = 123/x;
}
catch(ArithmeticException
ee)
{
//获取描述当前异常的消息
Console.WriteLine(ee.Message);
}
执行代码输出结果为:试图除以0。
注意:try块后跟多个catch 子句时,catch块的顺序很重要,因为会按顺序检查 catch 子句。将先捕获特定程度较高的异常,然后捕获特定程度较小的异常。
finally块用于清除try块中分配的任何资源,以及运行任何即使在发生异常时也必须执行的代码。控制总是传递给finally块,与try块的退出方式无关。
catch 用于处理语句块中出现的异常,而finally用于保证代码语句块的执行,与前面的try块的退出方式无关。例如:
int x = 0;
try
{
// 除数不能为0
float y = 123 / x;
}
finally
{
Console.Write(x);
}
此段代码虽然引发了异常,但finally块中的输出语句仍会执行。即:0。
通常try块、catch块和finally块是一起使用的。在 try 块中获取并使用资源,在 catch 块中处理异常情况,并在 finally 块中释放资源。
throw 语句用于立即无条件的引发异常,控制永远不会到达紧跟在throw后面的语句。通常 throw 语句与 try-catch 或 try-finally 语句一起使用。当引发异常时,程序查找处理此异常的 catch 语句。