先讲一下处理异常的语法结构:
举一个错误异常的例子:
class Program
{
static void Main(string[] args)
{
try
{
int[] myArray = {1, 2, 3, 4};
int myEle = myArray[4];
}
从上面代码可以看出,myArray[4]数组下标越界了
所以现在使用try,catch,finally来处理这个异常:
class Program
{
static void Main(string[] args)
{
try
{
int[] myArray = { 1, 2, 3, 4 };
int myEle = myArray[4];
}
catch (IndexOutOfRangeException e)//当捕捉的异常与代码发生的异常相同时,程序可继续执行catch里的代码,括号内放的是异常的对象
{
Console.WriteLine("异常,数组下标越界");
}
finally
{
Console.WriteLine("这里是finally");
}
}
}
运行的结果为:
从结果可以看出,使用了异常处理的情况下,程序依然能执行,输出了catch块和finally块的语句
我们再看下面的代码:
class Program
{
static void Main(string[] args)
{
try
{
int[] myArray = { 1, 2, 3, 4 };
int myEle = myArray[4];
}
catch (NullReferenceException e)//当捕捉的异常与代码发生的异常不同时,程序会终止
{
Console.WriteLine("异常");
Console.WriteLine("访问数组的时候越界了");
}
finally
{
Console.WriteLine("这里是finally");
}
Console.ReadKey();
}
}
运行的结果为:
程序在异常处终止了,原因是在catch块捕捉的异常与代码的异常不同,所以程序终止无法运行。
再看多一个例子:
class Program
{
static void Main(string[] args)
{
try
{
int[] myArray = { 1, 2, 3, 4 };
int myEle = myArray[4];
}
catch//当没有指定捕捉异常的内容时,能够捕捉到所有异常,程序执行
{
Console.WriteLine("异常,数组下标越界");
}
finally
{
Console.WriteLine("这里是finally");
}
Console.ReadKey();
}
}
运行结果为:
与第一个例子一样输出了catch块和finally块的语句,唯一不同的是在代码里catch块没有指定捕捉异常的内容
根据以上例子总结:
1.使用try,catch,finally语法处理异常可以使代码在异常的情况下继续执行。
2.当catch块指定捕捉的异常与代码异常不同时,程序会被终止。
3.当catch块没有指定捕捉异常内容时,任何异常都会被捕捉。
4.当代码没有异常时,catch块的内容不会被执行。
4.只要程序能够执行,finally块的内容都会被执行。