try //程序語句
···
finally // 釋放的資源
···
end;
在這個結構中,不管try塊中的語句是否產生異常,finally塊中的語句總是要執行的,在典型的情況下finally塊中的語句釋放內存,關閉文件,執行其他必須完成的操作來恢復系統穩定性;如果是try塊外的語句產生異常,就會立刻引起過程或過程跳出,跳過finally塊。需要注意的一點是,分配語句不要放在try塊中,即使它將產生一個異常也是如此{例如由於RAM 的缺陷而使內存分配失誤};finally塊的目的是釋放資源,因此必須在try塊前放置分配語句,在該塊中,插入任何可以產生異常的語句,或可以讓過程或函數退出以讓分配的資源懸掛直到用戶重新啟動的語句。下面結合實際例子來探討這種技術,並且顯示如何使用被保護資源塊來防止懸掛資源,具體的過程主要代碼如下:
var
I,J,K:Integer;
P:Pointer;
Begin
I:=0;J:=10;//給變量初值
GETmem ( P,4098 );//分配內存資源
Try
K:= J div I
var
I J K Integer;
P Pointer;
Begin
I:=0; J:=10; //給變量初值
GETmem(P,4098); //分配內存資源
Try
K:=J div I;
Except
ShowMessage (‘ RRSULTS:’ ‘I’+ IntToStr ( I ) + ‘J’ + IntToStr ( J ) +’KI’ + IntToStr ( K ));
Finally
FreeMem ( P, 4098 ) ; //釋放內存資源
ShowMessage( ‘已經釋放內存’)
End;
上述過程與被保護語句塊相似只是增加了一條分配內存的語句,這條語句調用GetMem 來保存4098 個字節的內存,當產生異常情況時,程序由於設置了被保護資源塊,使得占用內存的資源得以釋放。另外,程序中潛在的錯誤除法表達式存在於try塊中,如果除法不在try中,這條語句的執行就將產生異常,過程會立刻結束。
結束語
在程序中加入異常處理結構以達到對異常的控制,這種處理方法在編寫程序的過程中非常有用。有人可或許認為異常處理很復雜或者用處不大,其實異常處理並不復雜,無非是中斷產生異常的程序代碼,捕捉可能產生的異常並進行相應處理。掌握了這一基本方法後,就理解運用異常處理機制的重要性,以及如何使用異常處理機制了。