首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱英語 | 商務(wù)英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級(jí) | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學(xué)習(xí) | 法語 | 德語 | 韓語
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱 | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

2011計(jì)算機(jī)等考Delphi講義:異常處理與程序調(diào)試

Delphi提供了一套強(qiáng)大的異常處理機(jī)制。巧妙地利用它,可以使你的程序更為強(qiáng)健,使用更為友好。

  12.3 異常響應(yīng)

  異常響應(yīng)為開發(fā)者提供了一個(gè)按自己的需要進(jìn)行異常處理的機(jī)制。try …except …end形成了一個(gè)異常響應(yīng)保護(hù)塊。與finally不同的是:正常情況下except 后面的語句并不被執(zhí)行,而當(dāng)異常發(fā)生時(shí)程序自動(dòng)跳到except,進(jìn)入異常響應(yīng)處理模塊。當(dāng)異常被響應(yīng)后異常類自動(dòng)清除。

  下面的例子表示了文件打開、刪除過程中發(fā)生異常時(shí)的處理情況:

  uses Dialogs;

  var

  F: Textfile;

  begin

  OpenDialog1.Title := 'Delete File';

  if OpenDialog1.Execute then

  begin

  AssignFile(F, OpenDialog1.FileName);

  try

  Reset(F);

  if MessageDlg('Erase ' +OpenDialog1.FileName + '?',

  mtConfirmation, [mbYes, mbNo], 0) = mrYes then

  begin

  System.CloseFile(F);

  Erase(F);

  end;

  except

  on EInOutError do

  MessageDlg('File I/O error.', mtError, [mbOk], 0);

  on EAccessDenied do

  MessageDlg('File access denied.', mtError, [mbOk], 0);

  end;

  end;

  end.

  保留字on…do用于判斷異常類型。必須注意的是:except后面的語句必須包含在某一個(gè)on…do模塊中,而不能單獨(dú)存在。這又是同finally不同的一個(gè)地方。

  12.3.1 使用異常實(shí)例

  上面所使用的異常響應(yīng)方法可總結(jié)為如下的形式:

  on ExceptionType do

  {響應(yīng)某一類的異常}

  這種方法唯一使用的信息是異常的類型。一般情況下這已能滿足我們的需要。但我們卻無法獲取異常實(shí)例中包含的信息,比如異常消息、錯(cuò)誤代碼等。假設(shè)我們需要對(duì)它們進(jìn)行處理,那么就必須使用異常實(shí)例。

  為了使用異常實(shí)例,需要為特定響應(yīng)模塊提供一個(gè)臨時(shí)變量來保存它:

  on EInstance : ExceptionType do …

  在當(dāng)前響應(yīng)模塊中我們可以象使用一個(gè)普通對(duì)象那樣來引用它的數(shù)據(jù)成員。但在當(dāng)前響應(yīng)模塊之外不被承認(rèn)。

  下面的代碼用于獲取異常消息并按自己的方式顯示它:

  {窗口中包括一個(gè)ScrollBar部件,一個(gè)Button部件}

  procedure TErrorForm.Button1Click(Sender: TObject);

  begin

  try

  ScrollBar1.Max := ScrollBar1.Min-1;

  except

  on E: EInvalidOperation do

  MessageDlg('Ignoring Exception:'+E.Message,

  mtInformation,[mbOK],0);

  end;

  end;

  12.3.2 提供缺省響應(yīng)

  在異常響應(yīng)模塊中,一般我們只對(duì)希望響應(yīng)的特定異常進(jìn)行處理。如果一個(gè)異常發(fā)生而響應(yīng)模塊并沒有包含對(duì)它的處理代碼,則退出當(dāng)前響應(yīng)模塊,異常類仍被保留。

  為了保證任何異常發(fā)生后都能在當(dāng)前響應(yīng)模塊中被清除,可以定義缺省響應(yīng):

  try

  {程序正常功能}

  except

  on ESomething do

  {響應(yīng)特定異常}

  else

  {提供缺省響應(yīng)}

  end;

  由于else可以響應(yīng)任何異常,包括我們一無所知的異常,因此在缺省響應(yīng)中最好只包括諸如顯示一個(gè)消息框之類的處理,而不要改變程序的運(yùn)行狀態(tài)或數(shù)據(jù)。

上一頁  1 2 3 4 5 6 7 8 9 10  ... 下一頁  >> 
  相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試試題及答案解析專題
       預(yù)告:名師解析2010年9月計(jì)算機(jī)等級(jí)考試試題答案
       2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間及入口
       2010年9月計(jì)算機(jī)等考成績(jī)查詢短信免費(fèi)提醒開通
文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。