- 必要性
异常是对程序运行时出现的特殊情况的一种响应,不至程序崩溃。 - 关键词
try: 加在有可能有执行异常的代码前,形成try语块,后跟一个或多个 catch 块。
catch:表示异常的捕获。
finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。 - 语法
try
{
// 引起异常的语句
}
catch( ExceptionName e1 )
{
throw e1;
}
catch( ExceptionName e2 )
{
// 错误处理代码
}
catch( ExceptionName eN )
{
// 错误处理代码
}
finally
{
// 要执行的语句
}
- C#中的异常类
C# 异常是使用类来表示的。
C# 中的异常类主要是直接或间接地派生于 System.Exception 类。System.ApplicationException 和 System.SystemException 类是派生于 System.Exception 类的异常类。
System.ApplicationException 类支持由应用程序生成的异常。所以自定义的异常都应派生自该类。
System.SystemException 类是所有预定义的系统异常的基类。
异常类 描述
System.IO.IOException 处理 I/O 错误。
System.IndexOutOfRangeException 当方法指向超出范围的数组索引时的错误。
System.ArrayTypeMismatchException 处理当数组类型不匹配时生成的错误。
System.NullReferenceException 处理当依从一个空对象时生成的错误。
System.DivideByZeroException 处理当除以零时生成的错误。
System.InvalidCastException 处理在类型转换期间生成的错误。
System.OutOfMemoryException 处理空闲内存不足生成的错误。
System.StackOverflowException 处理栈溢出生成的错误。
- 实例
using System;
namespace ErrorHandlingApplication
{
class DivNumbers
{
int result;
DivNumbers()
{
result = 0;
}
public void division(int num1, int num2)
{
try
{
result = num1 / num2;
}
catch (DivideByZeroException e)
{
Console.WriteLine("Exception caught: {0}", e);
}
finally
{
Console.WriteLine("Result: {0}", result);
}
}
static void Main(string[] args)
{
DivNumbers d = new DivNumbers();
d.division(25, 0);
Console.ReadKey();
}
}
}
简单一点,可以直接定义一个Exception类对象,打印出其Message属性,一般有同样的效果,如下:
catch(Exception e)
{
Console.WriteLine(e.Message);
}
- 自定义异常类
自定义的异常类是派生自 ApplicationException 类。如下定义了 TempIsZeroException异常类
public class TempIsZeroException: ApplicationException
{
public TempIsZeroException(string message): base(message){}
public TempIsZeroException(string message, Exception inner) : base(message, inner) { }
}
调用如下:
static void Main(string[] args)
{
try
{
//throw new Exception();
throw new TempIsZeroException("信息不符合");
}
catch (TempIsZeroException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + "123");
}
Console.ReadKey();
}
}