delphi高手突破之異常及錯誤處理


什么是異常?為什么要用它?

所謂“異常”是指一個異常類的對象。Delphi的VCL中,所有異常類都派生於Exception類。該類聲明了異常的一般行為、性質。最重要的是,它有一個Message屬性可以報告異常發生的原因。

但需要強調的是,異常用來標志錯誤發生,卻並不因為錯誤發生而產生異常。產生異常僅僅是因為遇到了raise,在任何時候,即使沒有錯誤發生,raise都將會導致異常的發生。異常的發生,僅僅是因為raise,而非其他!采用拋出異常以處理意外情況,則可以保證程序主流程中的所有代碼可用,而不必加入繁雜的判斷語句。例如,函數A拋出異常:

 

[delphi]  view plain  copy
 
  1. function A() : Integer;  
  2. vat  
  3. pFile : textfile;  
  4. begin  
  5. …… // 一些代碼  
  6. pFile := SomeFunctionToOpenAnFile();  
  7. if pFile = nil then  
  8. raise Exception.Create(′Open file failed!′); // 文件打開失敗拋出異常  
  9. Read(pFile, ……); // 讀文件  
  10. …… // 其他一些對文件的操作,此時可以保證文件指針有效  
  11. end;  

函數A的代碼使得對文件打開的出錯處理非常簡單。如果打開文件失敗,則拋出一個Exception類的異常對象,函數立刻返回,從而保護了以下對文件指針的操作不被執行。拋出的異常也需要被捕獲和處理。假設函數B調用了函數A,要捕獲這個文件打開失敗的異常,就需要在調用A之前先預設一個陷阱,這個陷阱就是所謂的“try…except塊”。先看一下函數B的代碼:

 

 

[delphi]  view plain  copy
 
  1. procedure B();  
  2. begin  
  3. …… // 一些代碼  
  4. try  
  5. A(); // 調用A  
  6. SomeFunctionDependOnA(); // 依賴於A的結果的函數  
  7. Except  
  8. ShowMessage(′some error occured′); // 嘿嘿,掉進來了,發生異常  
  9. End;  
  10. …… // 繼續的代碼  
  11. end;  


A拋出的異常,會被B所設的try…except所捕獲。一旦捕獲到異常,就不再執行之后的敏感代碼,而是立刻跳至except塊執行錯誤處理,處理完成后再繼續執行整個try塊之后的代碼。程序流程的控制權被留在了函數B。

http://blog.csdn.net/sushengmiyan/article/details/7506421


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM