异常处理语句
在传统的ASP开发过程中,要发现错误是非常复杂和困难的,常常错误发生后,很难找到错误的代码行。C#为处理程序执行期间可能出现的异常情况提供内置支持,这些异常由正常控制流之外的代码处理。常用的异常语句包括throw,try,catch等。
.NET异常处理语句
异常处理语句一:
try
{
//可能出现异常的代码块
}
catch(异常类型 异常变量)
{
//出现异常需要执行的代码
}
finally
{
//一定需要执行的代码
}
异常处理语句二:
try
{
//可能出现异常的代码块
}
catch(异常类型 异常变量)
{
//出现异常需要执行的代码
}
异常处理语句三:
try
{
//可能出现异常的代码块
}
finally
{
//一定需要执行的代码
}
throw异常语句
throw语句用于发出在程序执行期间出现的异常情况的信号、引发异常的是一个对象,该对象的类是从System.Exception派生的。通常throw语句与try-catch或try-final语句一起使用。示例代码如下所示。
int x = 1; //声明整型变量x
int y = 0; //声明整型变量y
if (y == 0) //如果y等于0
{
throw new ArgumentException(); //抛出异常
}
Console.WriteLine("除数不能为0"); //输出错误信息
上述代码使用throw语句引发异常并向用户输出了异常信息。
try-catch异常语句
try-catch语句由一个try和一个或多个catch子句构成,这些子句可以指定不同的异常处理应用程序。当try块中的代码异常,则会执行catch块的保护代码,在应用程序开发当中,try-catch语句能够处理异常并返回给用户友好的错误提示,示例代码如下所示。
int x = 1; //声明整型变量x
int y = 0; //声明整型变量y
try //尝试处理代码块
{
x = x / y; //出现异常
}
catch //捕获异常
{
Console.WriteLine("除数不能为空"); //抛出异常
}
上述代码试图用一个整型变量除以一个值为0的整型变量,不使用try-catch捕捉异常,则系统会抛出异常跳转到开发环境或代码块。使用try-catch,系统同样会抛出异常,但是开发人员能够通过程序捕捉异常并自定义输出异常。同样,它也可以接受从System.Exception派生的对象传递过来的参数,示例代码如下所示。
int x = 1; //声明整型变量
int y = 0; //声明整型变量
try //尝试处理代码块
{
x = x / y; //进行除法计算
}
catch(Exception ee) //使用Exception对象
{
Console.WriteLine("除数不能为空,具体错误信息如下所示\n"); //输出错误信息
Console.WriteLine(ee.ToString()); //捕获代码
}
在运行结果中,程序详细的输出了异常的信息,此错误的信息由程序捕捉,并不会停止应用程序。
注意:try-catch能够捕捉应用程序中的错误信息,但是try-catch会对程序的性能造成影响,在程序开发当中,应避免不必要的try-catch语句的出现。
try-finally异常语句
catch用于处理应用程序语句中出现的异常,而finally语句用于清除try块中分配的任何资源,以及运行应用程序中任何发生异常也必须执行的代码。finally语句经常和catch语句搭配使用,示例代码如下所示。
int x = 1; //声明整型变量x
int y = 0; //声明整型变量y
try //尝试处理代码块
{
x = x / y; //进行除法计算
}
finally //继续执行程序块
{
Console.WriteLine("系统已自动停止"); //依旧输出错误信息
}
上述代码试图用一个整型变量除以一个值为0的整型变量,当异常发生时,系统会抛出异常,但是finally语句也被执行。
try-catch-finally异常语句
try-catch-final语句能够使应用程序更加健壮。try-finally语句依旧会抛出异常,而try-catch-finally语句能够捕获异常并执行finally语句中的控制语句,try-catch-finally语句结构和很灵活,示例代码如下所示。
int x = 1; //声明整型变量x
int y = 0; //声明整型变量y
try //尝试处理代码块
{
x = x / y; //进行除法计算
}
catch (Exception ee) //捕获异常信息
{
Console.WriteLine("除数不能为空,具体错误信息如下所示"); //抛出异常
Console.WriteLine(ee.ToString()); //输出异常信息
}
finally //继续执行程序块
{
Console.WriteLine("系统已自动停止"); //继续执行程序
上述代码试图用一个整型变量除以一个值为0的整型变量,当异常发生时,catch捕获并抛出异常,捕获异常后,finally语句也被执行