黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

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

2011計算機等考Delphi講義:異常處理與程序調試

來源:考試吧Exam8.com) 2010-10-28 11:26:53 考試吧:中國教育培訓第一門戶 模擬考場
Delphi提供了一套強大的異常處理機制。巧妙地利用它,可以使你的程序更為強健,使用更為友好。

  12.3.5 自定義異常類的應用

  利用Delphi的異常類機制我們可以定義自己的異常類來處理程序執行中的異常情況。同標準異常不同的是:這種異常情況并不是相對于系統的正常運行,而是應用程序的預設定狀態。比如輸入一個非法的口令、輸入數據值超出設定范圍、計算結果偏離預計值等等。

  使用自定義異常需要:

  1.自己定義一個異常對象類;

  2.自己引發一個異常。

  12.3.5.1 定義異常對象類

  異常是對象,所以定義一類新的異常同定義一個新的對象類型并無太大區別。由于缺省異常處理只處理從Exception或Exception子類繼承的對象,因而自定義異常類應該作為Exception或其它標準異常類的子類。這樣,假如在一個模塊中引發了一個新定義的異常,而這個模塊并沒有包含對應的異常響應,則缺省異常處理機制將響應該異常,顯示一個包含異常類名稱和錯誤信息的消息框。

  下面是一個異常類的定義:

  type

  EMyException = Class(Exception) ;

  12.3.5.2 自引發異常

  引發一個異常,調用保留字raise,后邊跟一個異常類的實例。

  假如定義:

  type

  EPasswordInvalid = Class(Exception);

  則在程序中如下的語句將引發一個EPasswordInvalid異常:

  If Password <> CorrectPassword then

  raise EPasswordInvalid.Create('Incorrect Password entered');

  異常產生時把System庫單元中定義的變量ErrorAddr的值置為應用程序產生異常處的地址。在你的異常處理過程中可以引用ErrorAddr的值。

  在自己引發一個異常時,同樣可以為ErrorAddr分配一個值。

  為異常分配一個錯誤地址需要使用保留字at,使用格式如下:

  raise EInstance at Address_Expession;

  12.3.5.3 自定義異常的應用舉例

  下面我們給出一個利用自定義異常編程的完整實例。

  兩個標簽框(Label1、Label2)標示對應編輯框的功能。編輯框PassWord和InputEdit用于輸入口令和數字。程序啟動時Label2、InputEdit不可見。當在PassWord中輸入正確的口令時,Label2、InputBox出現在屏幕上。此時Label1、PassWord隱藏。

  設計時,令Label2、InputEdit的Visible屬性為False。通過設置PassWord的PassWordChar可以確定輸入口令時回顯在屏幕上的字符。

  自定義異常EInvalidPassWord和EInvalidInput分別用于表示輸入的口令非法和數字非法。它們都是自定義異常EInValidation的子類。而EInValidation直接從Exception異常類派生。

  下面是三個異常類的定義。

  type

  EInValidation = class(Exception)

  public

  ErrorCode: Integer;

  constructor Create(Const Msg: String;ErrorNum: Integer);

  end;

  EInvalidPassWord = class(EInValidation)

  public

  constructor Create;

  end;

  EInvalidInput = class(EInValidation)

  public

  constructor Create(ErrorNum: Integer);

  end;

  EInValidation增加了一個公有成員ErrorCode來保存錯誤代碼。錯誤代碼的增加提供了很大的編程靈活性。對于異常類,可以根據錯誤代碼提供不同的錯誤信息;對于使用者可以通過截取錯誤代碼,在try...except模塊之外來處理異常。

  從以上定義可以發現:EInvalidPassWord和EInvalidInput的構造函數參數表中沒有表示錯誤信息的參數。事實上,它們保存在構造函數內部。下面是三個自定義異常類構造函數的實現代碼。

  constructor EInValidation.Create(Const Msg: String; ErrorNum: Integer);

  begin

  inherited Create(Msg);

  ErrorCode := ErrorNum;

  end;

  constructor EInValidPassWord.Create;

  begin

  inherited Create('Invalid Password Entered',0);

  end;

  constructor EInValidInput.Create(ErrorNum: Integer);

  var

  Msg: String;

  begin

  case ErrorNum of

  1:

  Msg := 'Can not convert String to Number';

  2:

  Msg := 'Number is out of Range';

  else

  Msg := 'Input is Invalid';

  end;

  inherited Create(Msg,ErrorNum);

  end;

  對于EInvalidInput,ErrorCode=1表示輸入的不是純數字序列,而ErrorCode=2表示輸入數值越界。

  口令檢查是用戶在PassWord中輸入口令并按下回車鍵后開始的。實現代碼在PassWord的OnKeyPress事件處理過程中:

  procedure TForm1.PassWordKeyPress(Sender: TObject; var Key: Char);

  const

  CurrentPassWord = 'Delphi';

  begin

  if Key = #13 then

  begin

  try

  if PassWord.text <> CurrentPassWord then

  raise EInvalidPassWord.Create;

  Label2.Visible := True;

  InputEdit.Visible := True;

  InputEdit.SetFocus;

  PassWord.Visible := False;

  Label1.Visible := False;

  except

  on EInvalidPassWord do

  begin

  PassWord.text := '';

  raise;

  end;

  end;

  Key:=#0;

  end;

  end;

  同樣,在InputEdit的OnKryPress事件處理過程中實現了輸入數字的合法性檢查:

  procedure TForm1.InputEditKeyPress(Sender: TObject; var Key: Char);

  var

  Res: Real;

  Code: Integer;

  begin

  if Key = #13 then

  begin

  try

  val(InputEdit.text,Res,Code);

  if Code <> 0 then

  raise EInValidInput.create(1);

  if (Res > 1) or (Res < 0) then

  raise EInValidInput.create(2);

  MessageDlg('Correct Input', mtInformation,[mbOk], 0);

  Key := #0;

  except

  on E:EInValidInput do

  begin

  InputEdit.text := '';

  MessageDlg(E.Message, mtWarning,[mbOk], 0);

  end;

  end;

  end;

  end;

  由于異常響應后即被清除,所以要顯示異常信息,需要另外的手段。在以上兩段程序中我們采用了兩種不同的方法:在口令合法性檢查中,利用異常重引發由系統進行缺省響應;在輸入數字合法性檢查中,通過異常實例來獲取異常信息并由自己來顯示它。

  以上所舉的是一個非常簡單的例子,但從中已可以發現:使用自定義異常編程,為程序設計帶來了很大的靈活性。

上一頁  1 2 3 4 5 6 7 8 9 10  ... 下一頁  >> 
  相關推薦:2010年9月計算機等級考試試題及答案解析專題
       預告:名師解析2010年9月計算機等級考試試題答案
       2010年9月計算機等級考試成績查詢時間及入口
       2010年9月計算機等考成績查詢短信免費提醒開通
文章搜索
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。
主站蜘蛛池模板: 欧美a在线观看 | 黄色大片在线观看 | 你懂的视频在线 | 国产一及毛片 | 日韩欧美在线观看成人 | 韩国 日本 在线观看 | 天天爱天天做久久天天狠狼 | 在线性爱视频 | 国产羞羞视频在线播放 | h片在线观看视频 | 午夜aaa| 日韩第九页 | 欧美在线网址 | 亚洲欧美日韩国产vr在线观 | 日本xx13一18处交高清 | 日韩视频在线免费 | 成年人网站免费观看 | 欧美成人剧情中文字幕 | 男女性色大片免费网站 | 亚洲区小说区图片区qvod伊 | 日韩在线手机看片免费看 | 欧美一区二区三区视频在线 | 一级做a爰片性色毛片武则天五则 | 亚洲阿v天堂最新版2021 | 最新理伦片eeuss影院 | 黄色午夜影院 | 全免费午夜真人毛片视频 | 在线亚洲日产一区二区 | 日b免费视频| 欧美二区在线观看 | 一区二区在线看 | 国产日韩欧美swag在线观看 | xxxx69中国hd老师18 | 亚洲无限乱码一二三四区 | 理伦片免费理论片 | 一区二区视频在线观看免费的 | 欧美黄视频在线观看 | 香蕉乱码成人久久天堂爱免费 | 免费在线你懂的 | 毛片在线看免费版 | 欧美日韩国产专区 |