12.3.3 響應一族異常
諸如
on ExceptionType do
的異常響應語句不僅可響應本類異常,而且可以響應子類異常。對於象EIntError、EMathError等系統不會引發的異常,它們將只響應其子類異常。而對於象
on Exception do
這樣的語句將會對任何異常進行響應。
下面一段代碼對整數越界異常進行單獨處理,而對其它整數異常進行統一處理:
try
{整數運算}
except
on ERangeError do
{越界處理}
on EIntError do
{其它整數異常處理}
end;
由於異常在處理後即被清除,因而上面的代碼可保證不會使ERangeError異常被多次處理。假如顛倒兩條響應語句的順序,則ERangeError異常響應將永遠沒有被執行的機會。
由於異常在處理後即被清除,因而當希望對異常進行多次處理時就需要使用保留字raise來重引發一個當前異常。
下面的代碼同時使用了異常響應和異常保護。異常響應用於設置變量的值,異常保護用於釋放資源。當異常響應結束時利用raise重引發一個當前異常。
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;
上面一段代碼體現了異常處理的嵌套。異常保護、異常響應可以單獨嵌套也可以如上例所示的那樣相互嵌套。
12.3.5 自定義異常類的應用
利用Delphi的異常類機制我們可以定義自己的異常類來處理程序執行中的異常情況。同標准異常不同的是:這種異常情況並不是相對於系統的正常運行,而是應用程序的預設定狀態。比如輸入一個非法的口令、輸入數據值超出設定范圍、計算結果偏離預計值等等。
使用自定義異常需要:
1.自己定義一個異常對象類;
2.自己引發一個異常。