目录
1. 异常
1.1 错误
在程序设计和运行中,不可避免的会出现各种各样的错误,为了减少设计程序中的错误,一般采用两种解决方案:
(1)在程序设计阶段,使用调试程序找出程序中的错误并改正。
(2)在程序中加入异常处理的语句,从而使得程序具有容错功能。
1.2 错误的分类
程序的错误分为以下3种:
(1)语法错误。如果使用了错误的语法、函数、类和结构,在编译时程序就无法生成运行代码。
(2)运行时错误。运行时发生的错误,称为异常。它分为:不可预料的逻辑错误和可以预料的逻辑错误。
(3)逻辑错误。逻辑错误是设计者在思考问题过程中造成的错误。
1.3 异常
异常就是程序执行期间发生的错误或者意外。
例如:
int[] Array = { 1, 2, 3, 4, 5 };
Console.WriteLine(Array[5]);
数组下表的越界,Array[5]已经超过了数组的范围,调用时会出现异常。而实际上程序是编译通过的,但是却在运行时出现错误,这就是异常。
如果该程序没有异常处理程序,则程序将停止执行,并显示一条错误信息,因此对程序中的异常处理是非常重要的。
一般情况下,在一个比较完整的程序中,要尽量考虑可能出现的各种异常,这样当发生异常时,控制流将立即跳转到关联的异常处理程序(如果存在)。 如果不进行异常处理,即不对错误做出响应,程序的健壮性就会大打折扣,甚至无法保证正常运行,所以必须要进行异常处理。
2. 异常处理
异常处理是为了防止未知错误而采取的措施,在异常发生的时候,转到一个位置尝试去处理错误,减少错误带来的损失,并且能够使程序继续运行下去。
2.1 .NET的异常类
.NET框架的类库中提供了许多已经定义好的异常类。分为两大类异常:System.SystemException(系统异常)和System.ApplicationException(应用异常)。
2.2 C#的常用异常类
C#的常用异常类均包含在System命名空间中。
2.3 C#异常处理
在C#中用于异常处理的语句有:
(1)try catch语句
(2)try catch finally语句
(3)throw语句
2.3.1 try catch语句
代码:
string str = "2019年";
try
{
int year = int.Parse(str); //把字符串转换成整型
Console.WriteLine(year);
}
catch(Exception e) //发生异常后处理程序段
{
Console.WriteLine(e.Message);
}
运行结果:
当try块中的语句在执行过程中出现异常时,公共语言运行时(CLR)查找处理此异常的catch语句,然后跳转到相应的catch块中。
2.3.2 try catch finally语句
代码:
string str = "2010年";
try
{
int year = int.Parse(str); //把字符串转换成整型
Console.WriteLine(year);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine("执行finally");
}
运行结果:
加入finally,则不论是否发生异常,都会执行finally中的语句。
2.3.3 throw语句
代码:
static int[] array = { 1, 2, 3, 4, 5 };
static void Main(string[] args)
{
try
{
GetArray(6);
Div(3,0);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static int GetArray(int index)
{
if (index >= 5)
throw new Exception("数组越界!!!");
return array[index];
}
static int Div(int a,int b)
{
return a / b;
}
运行结果:
throw 表达式;——抛出异常,但是表达式System.Exception或从System.Exception派生出的类的实例。
3. 总结
在编写程序的过程中,不可避免的出现各种错误,语法的错误通过编译器可以轻松地解决。
逻辑的错误,看个人的思维,有时候会卡很久,需要花时间来解决。
而运行时的错误,也就是异常,需要我们通过异常处理来解决,这样才能够使代码能加流畅,而且避免这些异常所带来的问题。