所有的异常类都继承自System.Exception类,当异常产生时,CLR将创建该异常类的实例对象,将从最底层依次寻找合适的异常类型,同时若存在catch语句时将会选择最合适的语句进行处理。
catch语句包括三种形式:
多catch的处理原则
一个异常发生时,会跳转到与异常异常最匹配的catch块执行,继承链决定了匹配度。
public static void HandleExecptionMethod()
{
try
{
throw new ApplicationException("ApplicationException Occur!");
}
catch (NullReferenceException)//尝试取消引用空对象时引发
{
Console.WriteLine("Handle1");
}
catch (ArgumentException)//当向方法提供的参数之一无效时引发
{
Console.WriteLine("Handle2");
}
catch (ApplicationException)//当程序发生非致命性应用程序错误时引发的异常
{
Console.WriteLine("Handle3");
}
catch (SystemException)
{
Console.WriteLine("Handle4");//与system命令空间中预定义异常定义基类
}
catch (Exception)//应用程序执行过程中发生错误
{
Console.WriteLine("Handle5");
}
Console.ReadKey();
}
在上例中共有5个catch块,注意catch块必须按照从最具体到最常规的顺序排列,否则可能造成编译错误。例若将Handle5的向上移到Handle4前面,则发生编译错误。
{
FileStream fs = null;
try
{
fs = new FileStream("c:\\dd.txt",FileMode.Open);
StreamReader strder = new StreamReader(fs,System.Text.Encoding.Default,false);
string st = strder.ReadLine();
Console.WriteLine(st);
}
catch (Exception e)
{
Console.WriteLine(e.GetType());//获取异常类型
//throw new FileNotFoundException("data.txt is not existed"); //重新获取异常
}
finally
{
fs.Close();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。