try
{
//获取并使用资源,可能出现异常
}
catch(DivideByZeroException de)
{
}
catch(ArithmeticException ae)
{
}
catch(Exception e)
{
//捕获并处理异常,当出现多个异常且异常类之间有继承关系(DivideByZeroException==>ArithmeticException==>Exception),
//捕获顺序是子类在前,基类在后
}
finally
{
//无论什么情况(即使在catch块中return)下,都会执行该块的代码(如:关闭文件)
//另外需要说明的是,在finally块中使用任何break、continue、return退出都是非法的。
}
除了以上的try-catch-finally的处理方式外,还有三种方式来捕获异常:
1. 页面级错误处理(通过Page_Error事件)
//在页面上进行处理
protected void Page_Error(object sender, EventArgs e)
{
string errorMsg = String.Empty;
Exception currentError = Server.GetLastError();
errorMsg += "系统发生错误:<br/>";
errorMsg += "错误地址:" + Request.Url + "<br/>";
errorMsg += "错误信息:" + currentError.Message + "<br/>";
Response.Write(errorMsg);
Server.ClearError();//清除异常(否则将引发全局的Application_Error事件)
}
2. 应用程序级(global.asax)错误处理(通过Application_Error事件)
//在应用程序进行处理
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
Exception iex = ex.InnerException;
string errorMsg = String.Empty;
string particular = String.Empty;
if (iex != null)
{
errorMsg = iex.Message;
particular = iex.StackTrace;
}
else
{
errorMsg = ex.Message;
particular = ex.StackTrace;
}
//AddLog(errorMsg, particular);
Server.ClearError();//处理完及时清理异常
}
3. 应用程序配置(web.config)
//总体配置
<system.web>
<!--mode有三种值:On,Off,RemoteOnly,defaultRedirect出现错误重定向的URL-->
<customErrors mode="On" defaultRedirect="ErrorPage.htm">
<!--statusCode错误状态码,redirect错误重定向的URL-->
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNoFound.htm"/>
</customErrors>
</system.web>
1我们随着调用栈的深入,性能开销也越大,所以异常应该尽早抛出。
2.对输入的数据应该在业务逻辑中严格检查。
3.try{}catch{}不会造成任何的系统开销,造成系统开销的是throw 抛出异常