基于Delphi的異常處理技術(shù)探究_第1頁
基于Delphi的異常處理技術(shù)探究_第2頁
基于Delphi的異常處理技術(shù)探究_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于Delphi的異常處理技術(shù)探究       摘  要  本文針對程序運(yùn)行過程中的產(chǎn)生異常情況,運(yùn)用Delphi開發(fā)工具并結(jié)合實(shí)例對異常產(chǎn)生的來源、異常處理的方法進(jìn)行探討。關(guān)鍵詞  Delphi;異常;被保護(hù)語句塊;被保護(hù)資源塊   引言在程序運(yùn)行過程中,往往出現(xiàn)一些意外錯誤狀態(tài)而導(dǎo)致程序無法運(yùn)行下去的情況。因此 在實(shí)現(xiàn)程序功能的同時,必須考慮如何處理程序運(yùn)行過程中可能出現(xiàn)的各種異常情況。所謂異常是指打斷程序正常流程的、非常見或意外的狀態(tài)、打開文件時按路徑找不到文件、不能分配所需的內(nèi)存等。現(xiàn)本

2、人結(jié)合實(shí)際就Delphi中異常的產(chǎn)生、來源以及實(shí)現(xiàn)異常處理的方法進(jìn)行探討。 異常的來源異常可由一些不同的資源產(chǎn)生,用戶的程序可以因?yàn)椴徽顟B(tài)產(chǎn)生異常,Delphi的組件可以因?yàn)椴煌氖录a(chǎn)生異常,把越界值賦給屬性或嘗試為不存在的數(shù)組元素建立索引, 運(yùn)行的庫過程和函數(shù)也能產(chǎn)生異常,執(zhí)行帶有非法操作的數(shù)學(xué)表達(dá)式,如被除肯定是異常。 其他產(chǎn)生異常操作的例子包括:引用nil指針執(zhí)行非法類型轉(zhuǎn)換的表達(dá)式等??偟膩碚f,軟件在運(yùn)行過程中遇到的情況千差萬別,因此產(chǎn)生異常的情況也各有不同。 傳統(tǒng)的異常處理方法  對于程序運(yùn)行過程中產(chǎn)生的異常情況,傳統(tǒng)處理的方法主要是通過IF語句,布爾型標(biāo)志和特別函數(shù)

3、返回值來控制。如在加載文件時,采用條件語句,以處理可能產(chǎn)生的打開空文件的錯誤。If  Opendialog.Filename=nil then  /判斷是否選擇文件  BeginShowMessage(“ 選擇文件無效,請重新選擇一個文件”)  ;End;以上例子是通過IF語句判斷到異常事件后,提示重新操作。這種異常處理方法當(dāng)然很容易理解,但在軟件編寫的過程中,如果每個地方都使用IF語句來檢查錯誤并處理異常,會使編程工作變得較為繁雜。在Delphi中,這個問題可以用更簡便的方法來實(shí)現(xiàn)異常處理。 Delphi中的異常處理方法Delphi支持多種異常處理機(jī)制

4、,Object Pascal提供了高級的異常處理機(jī)制。在這里就兩種異常處理方法進(jìn)行探討:4.1   創(chuàng)建被保護(hù)語句塊所謂被保護(hù)語句塊,簡單說是一條或多條語句,帶有對這些語句產(chǎn)生異常的處理器,運(yùn)用try和except關(guān)鍵字來創(chuàng)建被保護(hù)語句塊的結(jié)構(gòu)。具體結(jié)構(gòu)如下:Try  /可能引起異常的代碼段  ···except /對異常進(jìn)行處理的代碼段          ···end;其中try和except為關(guān)鍵字,t

5、ry用于標(biāo)志可能產(chǎn)生異常的代碼段。如果這段程序在運(yùn)行時產(chǎn)生了異常,系統(tǒng)會中止try代碼段的執(zhí)行,并根據(jù)所設(shè)的代碼段進(jìn)行。下面就如何利用這個結(jié)構(gòu)來創(chuàng)建被保護(hù)語句塊研究一個程序的例子,具體的調(diào)用事件處理過程主要代碼如下:var         I,J,K:Integer;           BeginI:=0;J:=10;Try  K:=J  DIV  I; /產(chǎn)生異常的語句Except&

6、#160; ShowMessage ( Divede error! + I=+ IntToStr ( I ) + J + IntToStr ( J ) +k= + IntToStr ( K );End;在這個過程中,表達(dá)式div嘗試用10除以0,使Object Pascal運(yùn)行庫產(chǎn)生一個異常,從而執(zhí)行了except塊中的ShowMessage語句,這個保護(hù)語句控制程序的執(zhí)行過程,主要有以下三個要點(diǎn):() 如果塊中的一條語句處理了一個異常,過程或函數(shù)在保護(hù)塊后面繼續(xù)正常運(yùn)行;() 如果沒有語句處理異常,當(dāng)前的過程或函數(shù)立即退出,異常查找調(diào)用鏈,直到找到合適的處理器;() 未處理的異常最終找到應(yīng)用

7、程序的缺省異常處理器,處理器顯示對話框和消息 缺省異常處理器接收所有沒有提供處理的異常。4.2 創(chuàng)建被保護(hù)資源塊以上的例子顯示錯誤消息僅僅是異常處理的一個方面,當(dāng)產(chǎn)生異常情況時,一個可靠的應(yīng)用程序必須恢復(fù)穩(wěn)定性。如果發(fā)生磁盤錯誤,應(yīng)用程序必須釋放可能不用的內(nèi)存快,直到用戶重新啟動;一個可靠的程序很容易排除錯誤,通過關(guān)閉文件,釋放Windows資源,用任何可能的方法從混亂中恢復(fù)。這種情況可用try 和finally關(guān)鍵字來創(chuàng)建被保護(hù)資源塊,所謂被保護(hù)資源塊,簡單說是由一條或多條語句組成,帶有對資源使用可能產(chǎn)生異常的處理器。 這個保護(hù)資源塊的基本框架結(jié)構(gòu)為:try/程序語句··

8、·finally  / 釋放的資源···end;在這個結(jié)構(gòu)中,不管try塊中的語句是否產(chǎn)生異常,finally塊中的語句總是要執(zhí)行的,在典型的情況下finally塊中的語句釋放內(nèi)存,關(guān)閉文件,執(zhí)行其他必須完成的操作來恢復(fù)系統(tǒng)穩(wěn)定性;如果是try塊外的語句產(chǎn)生異常,就會立刻引起過程或過程跳出,跳過finally塊。需要注意的一點(diǎn)是,分配語句不要放在try塊中,即使它將產(chǎn)生一個異常也是如此例如由于 的缺陷而使內(nèi)存分配失誤;finally塊的目的是釋放資源,因此必須在try塊前放置分配語句,在該塊中,插入任何可以產(chǎn)生異常的語句,或可以讓過程或函數(shù)退出

9、以讓分配的資源懸掛直到用戶重新啟動的語句。下面結(jié)合實(shí)際例子來探討這種技術(shù),并且顯示如何使用被保護(hù)資源塊來防止懸掛資源,具體的過程主要代碼如下:var         I,J,K:Integer;         P:Pointer;           BeginI:=0;J:=10;/給變量初值 GETmem ( P,4098

10、 );/分配內(nèi)存資源Try  K:= J div I ; ;:;:;/給變量初值(,);/分配內(nèi)存資源:;Except     ShowMessage ( RRSULTS: I+ IntToStr ( I ) + J + IntToStr ( J ) +KI + IntToStr ( K );   Finally                   FreeMem ( P, 4098 ) ;  /釋放內(nèi)存資源       ShowMessage( 已經(jīng)釋放內(nèi)存)End;上述過程與被保護(hù)語句塊相似只是增加了一條分配內(nèi)存的語句,這條語句調(diào)用 來保存 個字節(jié)的內(nèi)存,當(dāng)產(chǎn)生異常情況時,程序由于設(shè)置了被保護(hù)資源塊,使得占用內(nèi)存的資源得以釋放。另外,程序中潛在的錯誤除法表達(dá)式存在于try塊中,如果除法不在try中,這條語句的執(zhí)行就將產(chǎn)生異常,過程會立刻結(jié)束。結(jié)束語在程序中加入異常處理結(jié)構(gòu)以達(dá)到對異常的控制

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論