當前位置:編程學習大全網 - 編程語言 - 基於Delphi的異常處理技術研究

基於Delphi的異常處理技術研究

在程序運行過程中,經常會出現壹些意想不到的錯誤狀態,導致程序無法運行的情況。因此,在實現程序功能時,必須考慮如何處理程序運行過程中可能出現的各種異常情況。所謂異常,是指中斷程序正常流程的異常或意外狀態。打開文件時,根據路徑找不到文件,所需內存無法分配。並討論了異常處理的實現方法。異常的來源可以由壹些不同的資源生成。用戶程序可能會因為異常情況而產生異常。Delphi組件可以因為不同的事件產生異常,給屬性賦值越界值或者嘗試為不存在的數組元素建立索引。庫過程和函數也會產生異常,用非法運算執行數學表達式,如果除以0,肯定會產生異常。異常操作的例子包括引用零指針來執行非法類型轉換的表達式等。壹般來說,軟件在運行過程中遇到的情況千差萬別,所以產生異常的情況也各不相同。傳統的異常處理方法主要是通過IF語句的布爾標誌和特殊函數的返回值來控制,比如使用條件語句來處理程序運行過程中的異常情況。打開空文件可能出錯如果open dialog Filename = nil then///判斷是否選擇文件Begin ShowMessage(如果選擇的文件無效,請重新選擇文件)。End上面的例子是通過IF語句判斷異常事件後提示重新操作。這種異常處理方法當然很好理解,但是如果在軟件編寫的過程中到處使用IF語句來檢查錯誤和處理異常,編程工作就會變得更加復雜。在Delphi中,這個問題可以用壹個更簡單的方法來處理。Object Pascal支持多種異常處理機制,並提供高級異常處理機制。這裏討論兩種異常處理方法來創建受保護的語句塊。所謂的受保護語句塊就是壹個或多個語句,處理器會生成這些語句的異常。try和except關鍵字用於創建受保護的語句塊。具體結構如下:嘗試//可能導致異常的代碼段...除了//用於處理異常的代碼段...END其中try和except是關鍵字,try用於標記可能生成異常的代碼段。如果該程序在運行時產生異常,系統將暫停try代碼段的執行,並根據異常設置的代碼段繼續執行。以下是如何使用此結構創建受保護語句塊的示例。具體調用事件處理過程的主要代碼如下:v . Ar I j k integer begin I = j = try k = j div I//生成除ShowMessage以外的異常的語句(Divede錯誤!+I =+IntToStr(I)+J+IntToStr(J)+K =+IntToStr(K))End在這個過程中,表達式JdivI試圖通過除法使對象Pascal運行時生成異常,從而執行except塊中的ShowMessage語句。這個保護語句控制程序的執行過程主要有以下三點()。如果except塊中的語句處理異常過程或函數,它將繼續在保護塊後面正常運行()如果沒有處理異常的語句,當前過程或函數將立即退出異常搜索調用鏈,直到找到合適的處理器()。未處理的異常最終會找到應用程序的默認異常處理程序。默認的異常處理程序顯示對話框和消息。默認異常處理程序接收所有尚未處理的異常。顯示了創建受保護的資源塊和以上的示例。顯示錯誤信息只是異常處理的壹個方面。當異常發生時,可靠的應用程序必須恢復穩定性。如果發生磁盤錯誤,應用程序必須釋放在用戶重新啟動之前可能不會使用的內存。壹個可靠的程序可以很容易地消除錯誤,通過關閉文件釋放Windows資源,通過任何可能的手段從混亂中恢復。這種情況可以通過使用try和finally關鍵字來創建。所謂的受保護資源塊只是由壹個或多個處理器語句組成,這些語句可能會導致資源使用異常。這個受保護的資源塊的基本框架結構是try //程序語句finally//釋放的資源在這個結構中結束,無論try塊中的語句是否產生異常,finally塊中的語句總是被執行。在典型情況下,finally塊中的語句釋放內存、關閉文件並執行其他必須完成的操作,以恢復系統穩定性。如果try塊之外的語句生成異常,會立即導致進程或過程跳出,跳過finally塊,需要註意。有壹點是分配語句不應該放在try塊中,即使會產生異常(比如內存分配因為RAM有缺陷而出錯)。最後,該塊的目的是釋放資源,因此有必要在try塊之前放置壹個allocation語句。在此塊中,插入任何可以生成異常或使過程或函數退出的語句,以便可以掛起分配的資源,直到用戶重新啟動。下面的文章用實際例子討論了這種技術,並展示了如何使用受保護的資源塊來防止資源掛起。具體流程的主要代碼如下:VARIJ KNTEG。ErP指針Begin I = J = //給變量GETmem (P)的初始值分配內存資源// Try k = j div i var i j k integer p指針Begin I = J =//給變量GETmem(P)的初始值//分配內存資源Try k = j div i除show message(rrsults I+inttostr(I)+J+int tostr(J)+ki+int tostr(k))最後free mem(P);//釋放內存資源ShowMessage(內存已被釋放)End以上過程類似於受保護的語句塊,只是增加了壹條分配內存的語句。這條語句調用GetMem來節省4098字節的內存。當出現異常情況時,程序設置受保護的資源塊來釋放占用內存的資源。此外,程序中潛在的錯誤除法表達式存在於try塊中。如果除法不在try中,這個語句的執行會產生壹個異常過程。在程序中加入異常處理結構來控制異常在編程過程中非常有用。有些人可能認為異常處理非常復雜或者用處不大。其實異常處理並不復雜,無非就是中斷產生異常的程序代碼,捕捉可能出現的異常並進行相應的處理。掌握了這個基本方法之後,我就會明白使用異常處理機制的重要性,以及如何使用差異。通常的處理機制是Lishi Xinzhi/article/program/Delphi/201311/24897。
  • 上一篇:如何在 64位win8系統中安裝PLC編程軟件
  • 下一篇:大學偏門的專業有哪些
  • copyright 2024編程學習大全網