APP下载

.Net平台下的异常处理与异常应用研究

2013-05-11欧阳艳阶

湖北工业职业技术学院学报 2013年1期
关键词:数组代码定义

欧阳艳阶,张 明

(十堰职业技术学院 信息与智能工程系,湖北 十堰 442000)

0 引言

即使是经验丰富的软件工程师,也不可能开发出绝对完善的应用程序,因为程序运行中的有些错误是可以预料但不可避免的,比如内存空间不足、硬盘文件被移动、打印机未连接好、数组越界、文件找不到等。这类错误大都由外部环境或偶发性因素造成。而且程序还有语法错误、运行时(Run Time)错误和逻辑错误等各种错误源。特别是运行时错误和逻辑错误,即使采用软件测试方法进行严格测试也不可能完全排除掉。如网络访问异常中断、文件访问出错、被除数为零等。为了防止发生上述错误,必须在程序开发与运行过程中引入异常处理机制,并对异常进行监视、处理。当发生异常时,程序必须能及时捕获异常,正确处理异常,并采用容错机制消除异常,而不是中断软件运行或直接退出。

1 Visual Studio.Net平台异常处理机制

在应用程序开发过程中,Visual Studio.Net平台为我们提供了严密的异常捕获机制,使应用程序能够健壮地运行。Visual Studio.Net平台的异常处理是跨语言和标准化的,即异常与语言无关,其结构、原理、运行机制、错误定义完全一致。一个在Visual C++开发环境引发的异常可以在Visual Studio C#或Visual Studio J++开发环境中得到处理。同时Visual Studio.Net平台也吸取了Java在处理程序异常时所采取的程序结构和语法特点。在Visual Studio.Net平台下,异常被分为标准异常和自定义异常,其中自定义异常为用户提供了能灵活实现容错功能的手段。标准异常和自定义异常的处理机制使软件运行更加健壮,软件指令更清晰,结构更简洁,可读性更强。

1.1 异常的产生

当应用程序遇到异常情况(如被零除、文件无法访问、网络中断、数组访问越界等)时,异常就会自动产生。此时Visual Studio.Net异常处理机制会自动转移到已经定义好的异常处理程序(软件开发过程中定义的容错代码)。遗憾的是很多软件在开发过程中容错功能不够完善,导致容错代码缺失或容错代码不完善,此时异常处理程序将停止执行或执行存在问题的容错代码。

1.2 异常发生后的容错处理

Visual Studio.Net采用Try{}Catch{}Finally{}的语法结构进行异常处理。软件开发过程中定义的功能代码放在Try{}模块部分,容错代码放在Catch{}部分,最后必须执行的代码放在Finally{}模块部分。软件首先尝试运行Try{}结构部分的指令,若此时发生异常,则由Catch{}结构部分进行捕获,并执行该部分的容错代码。也可直接定义throw关键字代码,并显式直接抛出异常。

1.3 异常处理的结束工作

无论Catch{}模块能否捕获异常,Finally{}模块部分都是必须执行的部分,这种设计也为通用的容错功能提供了便利。比如程序员可以将一些释放资源之类的指令、常见的错误处理代码、关闭对象的代码等放在此模块,进行通用的容错处理。

2 标准异常类与自定义异常类

在Visual Studio.NET平台下,异常类分标准异常类和自定义异常类。异常类System.Exception派生自所有类的基类System.Object。Visual Studio.NET中已经定义好的异常类(如:Application Exception、SystemException等)均派生自System.Exception类,这些由Visual Studio.NET平台定义的类称为标准异常类。还有一些类派生自Application Exception类,是由用户、中间件企业等第三方定义的异常类我们称它们为自定义异常类。

2.1 Visual Studio.NET平台重要的几类标准异常类

Visual Studio.NET平台中重要的几类标准异常类按其作用的不同可分为[1]:

(1)用于定义标准异常类和自定义异常类的基类(包括Exception,该类是所有标准异常类的基类;System Exception类,该类是System命名空间中所有其他异常类的基类,主要用于定义自定义异常类)。

(2)与数组相关的异常(包括Array Type Mismatch Exception类,用于处理数组中存储数据类型错误的异常;Index Out Of Exception类,用于处理数组下表越界异常;Rank Exception类,用于处理数组维数错误异常)。

(3)与异常参数相关的异常类(包括Format Exception类,用于处理异常参数格式错误的异常;Argument Exception类,用于处理异常参数无效的异常)。

(4)与算术相关的异常(包括Arithmetic Exception类,用于处理除零而引发的异常)。

(5)与成员访问相关的异常(包括Member Access Exception类,用于处理访问成员失败时的异常)。

(6)与输入输出相关的异常(包括IOException类,用于处理进行文件输入输出操作时所引发的异常)。

2.2 自定义异常类

如果系统提供的异常类不能满足软件的需要或不能与程序中的异常相匹配,就需要程序员自定义异常类。自定义异常类的语法如下:class自定义异常类名称名:基类异常名称

创建自定义异常类应严格遵循几个原则:

(1)声明可序列化;

(2)添加一个默认的构造函数;

(3)添加包含Message的构造函数;

(4)添加一个包含Message,及内部异常类型参数的构造函数;

(5)添加一个序列化信息相关参数的构造函数。

同时自定义异常时必须自定义异常的编码规则,将异常类命名为以单词“Exception”结尾,如Word Process Exception,User Info Exception 等。还要考虑出现异常时的提示信息,即设置异常类的Message属性,可以使用构造函数继承来自基类的Message属性。

3 自定义异常类在软件项目开发中的实例应用与优化

笔者在软件项目开发过程中,经常遇到数据库编号重复之类的错误,为了保证软件的健壮性,此时引入异常非常必要。本文构造了一个通用的异常处理界面,利用SQL Server或Microsoft Access系统中的示例数据库Northwind,通过文本框控件Text-Box向Northwind数据库中的Customer表添加一条记录,如果Customer ID出现重复记录,则立即启动异常处理机制,抛出相应的异常信息。其开发思想及代码如下:

3.1 定义自定义异常类的基类

该自定义异常类定义了两个异常处理构造函数,通过base指令,使Northwind Custom Exception构造函数继承自Visual Studio.Net平台的标准异常类ApplicationException。第二种构造函数提供了两个参数,一个参数用来定义和处理异常消息,另一个参数用来定义和处理异常错误。

在本实例应用中,还需声明一个处理自定义异常错误的错误处理类。在不同类型的软件运行环境下,容错程序可以根据偶发事件捕获不同的异常处理类,并进行不同的错误处理。

在应用程序运行过程中,当异常类的触发条件满足时,自定义的异常处理程序就会做出一系列的错误处理动作,并抛出异常信息,让程序员或用户做出相应的处理,如:提供环境变量信息,记载错误并保存、进行容错处理等。

3.2 在Visual Studio.Net平台下使用自定义的异常类插入Custom表记录

4 结束语

异常处理机制是一种安全高效的编程策略,是开发应用软件必不可少的部分。将异常处理巧妙地运用到程序中,可以提高程序的稳定性、健壮性和安全性,是开发应用程序必须考虑的重要内容。但在应用程序开发初期往往容易被忽略。

本文中详细介绍了Visual Studio.Net平台下的异常及异常处理机制,给出了如何自定义并优化一个“数据库编号重复”类的异常实例,详细解析了异常处理过程和异常发生后可以采取的各种处理方式。本文在Visual Studio 2008,SQL Server 2005环境下调试通过。

[1]刘彦博,等.Visual Studio技术大全[M].北京:人民邮电出版社,2009:102-112.

[2]曾建华.Visual Studio 2010(C#)Windows数据库项目开发[M].北京:电子工业出版社,2012:105-107.

猜你喜欢

数组代码定义
JAVA稀疏矩阵算法
JAVA玩转数学之二维数组排序
创世代码
创世代码
创世代码
创世代码
Excel数组公式在林业多条件求和中的应用
成功的定义
寻找勾股数组的历程
修辞学的重大定义