异常是在程序执行期间出现的错误。异常情况发生在运算不能正常完成的时候。当程序中出现异常是,系统会抛出错误。错误通过异常处理过程被处理。
例如,System.IO.IOException异常在试图访问非法流对象时抛出。同样,如果分母是0,整数除法运算抛出System.DivideByZeroException异常。
不论何时发生错误,运行时创建一个异常对象,并且将它发送到发生异常的程序。这个操作被称为抛出异常。异常对象包含关于错误类型的信息。
所有的异常都派生自System.Expection类,它是所有异常的父类。
在代码中可能发生的错误有三种类型。它们是:
语法错误
语法错误发生在编译器无法编译代码的时候。这样的错误可以发生在没有适当构造语句、关键字拼写错误或忽略标点的时候。在编译时,应用程序中的所有语句互相连接以产生一个可执行的单元。
运行时错误
运行时错误发生在应用程序试图完成一个运行时不允许的运算时。这样错误的示例有除数为零。运行时错误也被称为异常。所有的异常都在类的预定义集中被定义。
逻辑错误
逻辑错误发生在应用程序编译和运行正常单没有产生预期结果的时候。
小问题:
运行时错误也被称为______。
答案:exception
存在许多异常类,它们都直接或间接派生自System.Exception类。有些派生自System.Exception类的异常类是System.ApplicationException和System.SystemException。
异常类的层次结构在下图中显示。
如果任何用户定义的应用程序需要它自己的异常,它将从ApplicationException类继承异常。System.SystemException类充当所有预定义系统异常的基类。下表描述了一些派生自System.SystemException类的类。
异常类 | 描述 |
---|---|
System.IO.IOException | 处理I/O错误。 |
System.IndexOutOfRangeException | 处理当方法引用超出了数组界限的数组元素时所产生的错误。 |
System.NullReferenceException | 处理在解除空对象引用的过程中产生的错误 |
System.DivideByZeroException | 处理在除数中除数为0的过程中产生的错误。它派生自System.ArthmeticException类,后者的父类是SystemException |
System.InvalidCastException | 处理在类型转换中产生的错误 |
System.OutOfMemoryException | 处理应用程序内存分配的错误 |
小问题:
以下哪个类可以处理可能在
将一个数据类型转换为另一个数据类型的过程中所产生的错误?
a.System.OutOfMemoryException
b.System.NullReferenceException
c.System.InvalidCastException
d.System.IndexOutOfRangeException
答案:
c.System.InvalidCastException
需要在程序中使用异常处理程序来处理异常。这个处理程序会处理异常。异常处理中,应用程序分为若干代码块。显示产生错误可能性的块包含一个或多个异常处理程序。这些处理程序尊徐控制的结构和统一方式来处理系统级和应用程序级错误。
以下代码显示了变量被零除时如何产生异常:
using System;
namespace System_Exception
{
class Add_Num
{
public static void Adding_Numbers( int number1, int number2)
{
int res = number1 / number2;
Console.WriteLine(res);
}
static void Main(string[] args)
{
Add_Num.Adding_Numbers( 10,0 );
Console.ReadLine();
}
}
<