下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年名譽(yù)權(quán)質(zhì)押合同
- 2025年合作加盟代理合資經(jīng)營合同
- 2025年家居中介代理協(xié)議
- 2025年圖書分銷合作協(xié)議
- 2025年浮動抵押證明書樣本
- 2025版出納人員責(zé)任擔(dān)保及財務(wù)風(fēng)險評估合同2篇
- 煙臺與上海2025年度冷鏈物流合作服務(wù)合同3篇
- 2025年度花店店面轉(zhuǎn)讓與城市綠化合作合同
- 二零二五年度國際貿(mào)易財務(wù)擔(dān)保合同賬務(wù)結(jié)算要求
- 二零二五年度鋁合金健身器材制造與銷售合同4篇
- 化學(xué)-河南省TOP二十名校2025屆高三調(diào)研考試(三)試題和答案
- 智慧農(nóng)貿(mào)批發(fā)市場平臺規(guī)劃建設(shè)方案
- 林下野雞養(yǎng)殖建設(shè)項目可行性研究報告
- 2023年水利部黃河水利委員會招聘考試真題
- Python編程基礎(chǔ)(項目式微課版)教案22
- 01J925-1壓型鋼板、夾芯板屋面及墻體建筑構(gòu)造
- 近五年重慶中考物理試題及答案2023
- 乳腺導(dǎo)管原位癌
- 冷庫管道應(yīng)急預(yù)案
- 《學(xué)習(xí)教育重要論述》考試復(fù)習(xí)題庫(共250余題)
- 網(wǎng)易云音樂用戶情感畫像研究
評論
0/150
提交評論