12.3.3 響應(yīng)一族異常
諸如
on ExceptionType do
的異常響應(yīng)語句不僅可響應(yīng)本類異常,而且可以響應(yīng)子類異常。對于象EIntError、EMathError等系統(tǒng)不會引發(fā)的異常,它們將只響應(yīng)其子類異常。而對于象
on Exception do
這樣的語句將會對任何異常進行響應(yīng)。
下面一段代碼對整數(shù)越界異常進行單獨處理,而對其它整數(shù)異常進行統(tǒng)一處理:
try
{整數(shù)運算}
except
on ERangeError do
{越界處理}
on EIntError do
{其它整數(shù)異常處理}
end;
由于異常在處理后即被清除,因而上面的代碼可保證不會使ERangeError異常被多次處理。假如顛倒兩條響應(yīng)語句的順序,則ERangeError異常響應(yīng)將永遠(yuǎn)沒有被執(zhí)行的機會。
由于異常在處理后即被清除,因而當(dāng)希望對異常進行多次處理時就需要使用保留字raise來重引發(fā)一個當(dāng)前異常。
下面的代碼同時使用了異常響應(yīng)和異常保護。異常響應(yīng)用于設(shè)置變量的值,異常保護用于釋放資源。當(dāng)異常響應(yīng)結(jié)束時利用raise重引發(fā)一個當(dāng)前異常。
var
APointer: Pointer ;
AInt , ADiv: Integer;
begin
ADiv := 0;
GetMem ( APointer , 1024 );
try
try
AInt := 10 div ADiv ;
except
on EDivByZero do
begin
AInt := 0 ;
raise;
end;
end;
finally
FreeMem ( APointer , 1024 );
end;
end;
上面一段代碼體現(xiàn)了異常處理的嵌套。異常保護、異常響應(yīng)可以單獨嵌套也可以如上例所示的那樣相互嵌套。
相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |