异常处理(Exception Handling)就是一种解决这一问题的机制,能够较好地处理程序不能正常运行的情况。
程序操作
程序设计的要求之一就是程序的健壮性。希望程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素导致程序不能正常运行。
在
设计算法时,往往对算法的正常逻辑处理流程设计得比较准确,对异常情况的处理反而不容易设计全面,导致程序在出现异常情况时崩溃。如果软件出现这种情况会给用户带来极不友好的体验。
举一个简单的例子,试设计一个程序,运行后提示用户输入两个整数。两个整数用空格隔开,用户输入后,程序显示出两个数字的和。这个程序正常的逻辑处理非常简单,但普用户输入的两个字符串不是整数,程序应该给出提示,否则程序有可能会崩溃。因此针对异常情况的处理也是非常重要的,当然有时这种处理会比较复杂。
常见异常
异常(Exception)是程序在运行时可能出现的会导致程序运行终止的错误。这种错误是不能通过编译系统检查出来的。常见的异常如下:
(1)系统资源不足。例如,内存不足,不可以动态申请内存空间;磁盘空间不足,不能打开新的输出文件等。
(2)用户操作错误导致运算关系不正确。例如,出现分母为0。数学运算溢出,
数组越界,参数类型不能转换等。
异常特点
异常有以下的一些特点:
(1)偶然性。程序运行中,异常并不总是会发生。
(2)可预见性。异常的存在和出现是可以预见的。
(3)严重性。一旦异常发生,程序可能终止,或者运行的结果不可预知。
异常例子
在
C++中,使用
try、
throw、
catch三个关键字来实现异常处理。
try后面的复合语句称为受保护段,受保护段的代码有可能出现异常,因此在try部分进行
异常检测。如果检测到异常,就通过throw语句抛掷这个异常。受保护段所调用的
函数中也可以检测和抛掷异常。所抛掷的异常,可以是一个整数、一个
字符串、一个
变量,甚至是一个类的对象。也就是说,异常是有不同类型的。
catch部分的作用是捕获异常和处理异常。每个catch后的括弧内,都要指定一个“异常类型”,表明它可以捕获哪种类型的异常。一旦捕获到异常,就通过异常处理语句来进行处理。
程序执行的流程有两种:
(1)没有异常:try 受保护语句 其他语句。
(2)有异常:try 受保护语句 throw异常 catch 异常处理语句。
在编写带有异常处理的程序时,还要注意:
(1)try语句块和catch语句块是一个整体,两者之间不能有其他的语句。
(2)一个try语句块后面可以有多个catch语句,但是。不可以几个try语句块后面用一个catch语句。