1Exception类
定义一个异常是:0Exception e;.
Exception 类的构造函数有四种,常用的有三中=种:
Exception():该构造函数将新的实例的Message属性初始化为系统提供的消息,且所有的Exception类派生的类应提供此默认构造函数。
Exception(string message): 使用指定的错误信息初始化Exception类的实例;
Exception(string message,Exception innerException):使用指定错误信息和对作为异常原因的内部异常的引用来初始化Exception类的新实例。
异常从发生问题的代码区域引发,然后沿堆栈向上传递,直到应用程序处理它或程序终止。
2.异常处理方法
2.1 抛出异常(throw)
代码中编写抛出异常的语句,其方法是使用关键字throw.抛出异常时程序的现象将会与由于代码出现错误而产生的异常相同。
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ArrayList
{
class MyClass
{
public MyClass()
{
Console.WriteLine("defined one Class");
}
public void Method()
{
try
{
int[] MyList = { 1, 2, 3, 4, 5 };
for (int i = 0; i < 5; i++)
{
MyList[i] = MyList[i] * 2;
}
Console.WriteLine(MyList[5].ToString());
}
class Program
{
static void Main(string[] args)
{
MyClass myarr = new MyClass();
try
{
Exception e = new Exception();//创建实例
throw e;
//myarr.Method();
}
关键字throw一行时会出现异常提示,在异常提升窗口中显示了异常的名称。抛出异常时只需创建某一个异常类的实例。
2.2 捕获异常(Catch)
在出现异常时一边通过使用throw关键字抛出异常,一边使用try….catch关键字捕获抛出的异常。
代码:
namespace ArrayList
{
class MyClass
{
public MyClass()
{
Console.WriteLine("defined one Class");
}
public void Method()
{
try
{
int[] MyList = { 1, 2, 3, 4, 5 };
for (int i = 0; i < 5; i++)
{
MyList[i] = MyList[i] * 2;
}
Console.WriteLine(MyList[5].ToString());
}
catch (ArgumentNullException e)
{
Console.WriteLine(e.Message);
throw e;
}
class Program
{
static void Main(string[] args)
{
MyClass myarr = new MyClass();
try
{
//Exception e = new Exception();
//throw e;
myarr.Method();
}
catch (SystemException e)
{
Console.WriteLine("出现其他异常");
}
Console.ReadKey();
}
}
}
此程序中由于错误的使用了数组下标,导致运行程序时出现异常提示。利用了try..catch 关键字来捕获异常。
2.3 异常的最终处理(finally)
Finally代码块用于清除try代码块中分配的任何资源,以及运行任何即时在发生异常时也必须执行的代码。我们知道catch用于处理语句块中出现的异常,而finally代码块用于保证代码语句的执行的。控制总是传递给finally块,与try块的退出方式无关,也就是说finally块既可以和try关键字单独配对使用,也可以与try…catch语句共同使用。
代码:
namespace @finally
{
class MyClass
{
public MyClass()
{
Console.WriteLine("text Programm");
}
public void Method()
{
try
{
IndexOutOfRangeException e = new IndexOutOfRangeException();
throw e;
}
catch(IndexOutOfRangeException ex)
{
Console.WriteLine("Find IndexOutOfRangeException 异常"
+"请检查代码,确认有无数组索引超出范围的情况");
Console.WriteLine(ex.Data.ToString());
Console.WriteLine(ex.HelpLink);
Console.WriteLine(ex.InnerException==null?"":ex.InnerException.ToString());
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Source);
Console.WriteLine(ex.StackTrace);
Console.WriteLine(ex.TargetSite.ToString());
}
finally
{
Console.WriteLine("程序运行完成");
}
}
}
class Program
{
static void Main(string[] args)
{
MyClass myclass = new MyClass();
myclass.Method();
Console.ReadKey();
}
}
}
3.异常处理的属性
3.1:TargetSit属性
此属性是用于获取引发当前异常的方法,包括了查看发生异常的方法所在的类,其成员属性等会一系列信息。
3.2:StackTrace属性
该属性包含可用于错误发生位置的堆栈跟踪,如果有可用的调试信息,则堆栈跟踪包含源文件名和程序行号,
3.3: HelpLink属性
该属性可用于保存某个帮助文件的URL或URN,该帮助文件通常会提供有关异常起因的大量信息。
3.4:Data属性
该属性可以以键值对的形式保存任意的数据,其类型为IDictionary。在发生异常时候将很多的信息都保存在Data中。方便后续处理,一般都是将异常发生的时间储存在Data属性中。