亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 029.htm

?? delphi編程
?? HTM
?? 第 1 頁 / 共 2 頁
字號:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI基礎教程-->第十二章 異常處理與程序調試(二)</TITLE>
<META NAME="keywords" CONTENT=" DELPHI基礎教程 第十二章 異常處理與程序調試(二)">
<META NAME="description" CONTENT=" - DELPHI基礎教程 - 第十二章 異常處理與程序調試(二)">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋體"}
.tt2 {font: 12pt/15pt "宋體"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD CLASS="tt3" VALIGN="top" width="8%"  bgcolor="#e0e0e0"><strong><A HREF="030.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR>
<A HREF="028.htm"><FONT style="FONT-SIZE: 9pt">前一頁</font></A><BR>

<A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目錄</font></A><BR>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁</font></A><BR>
</strong>
</TD>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷體_GB2312">第十二章 異常處理與程序調試(二)</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
</font><p align="center">12.3<font face="宋體" lang="ZH-CN"> 異常響應 </p>
<p> </font> <font face="宋體" lang="ZH-CN">異常響應為開發者提供了一個按自己的需要進行異常處理的機制。</font>try
<font face="宋體" lang="ZH-CN">…</font>except <font face="宋體" lang="ZH-CN">…</font>end<font
face="宋體" lang="ZH-CN">形成了一個異常響應保護塊。與</font>finally<font
face="宋體" lang="ZH-CN">不同的是:正常情況下</font>except <font face="宋體"
lang="ZH-CN">后面的語句并不被執行,而當異常發生時程序自動跳到</font>except<font
face="宋體" lang="ZH-CN">,進入異常響應處理模塊。當異常被響應后異常類自動清除。</p>
<p>  下面的例子表示了文件打開、刪除過程中發生異常時的處理情況: </p>
</font><p>uses Dialogs;</p>
<p>var</p>
<p>F: Textfile;</p>
<p>begin</p>
<p>OpenDialog1.Title := 'Delete File';</p>
<p>if OpenDialog1.Execute then</p>
<p>begin</p>
<p>AssignFile(F, OpenDialog1.FileName);</p>
<p>try</p>
<p>Reset(F);</p>
<p>if MessageDlg('Erase ' +OpenDialog1.FileName + '?',</p>
<p>mtConfirmation, [mbYes, mbNo], 0) = mrYes then</p>
<p>begin</p>
<p>System.CloseFile(F);</p>
<p>Erase(F);</p>
<p>end;</p>
<p>except</p>
<p>on EInOutError do</p>
<p>MessageDlg('File I/O error.', mtError, [mbOk], 0);</p>
<p>on EAccessDenied do</p>
<p>MessageDlg('File access denied.', mtError, [mbOk], 0);</p>
<p>end;</p>
<p>end;</p>
<p>end.</p>
<font face="宋體" lang="ZH-CN"><p>  保留字</font>on<font face="宋體"
lang="ZH-CN">…</font>do<font face="宋體" lang="ZH-CN">用于判斷異常類型。必須注意的是:</font>except<font
face="宋體" lang="ZH-CN">后面的語句必須包含在某一個</font>on<font
face="宋體" lang="ZH-CN">…</font>do<font face="宋體" lang="ZH-CN">模塊中,而不能單獨存在。這又是同</font>finally<font
face="宋體" lang="ZH-CN">不同的一個地方。 </p>
</font><p>12.3.1 <font face="宋體" lang="ZH-CN">使用異常實例 </p>
<p>  上面所使用的異常響應方法可總結為如下的形式: </p>
<p>  </font>on ExceptionType do</p>
<p>{<font face="宋體" lang="ZH-CN">響應某一類的異常} </p>
<p>  這種方法唯一使用的信息是異常的類型。一般情況下這已能滿足我們的需要。但我們卻無法獲取異常實例中包含的信息,比如異常消息、錯誤代碼等。假設我們需要對它們進行處理,那么就必須使用異常實例。</p>
<p>  為了使用異常實例,需要為特定響應模塊提供一個臨時變量來保存它: </p>
<p>  </font>on EInstance : ExceptionType do<font face="宋體" lang="ZH-CN">  … </font></p>
<font face="宋體" lang="ZH-CN"><p>  在當前響應模塊中我們可以象使用一個普通對象那樣來引用它的數據成員。但在當前響應模塊之外不被承認。</p>
<p>  下面的代碼用于獲取異常消息并按自己的方式顯示它: </p>
<p>{窗口中包括一個</font>ScrollBar<font face="宋體" lang="ZH-CN">部件,一個</font>Button<font
face="宋體" lang="ZH-CN">部件} </p>
</font><p>procedure TErrorForm.Button1Click(Sender: TObject);</p>
<p>begin</p>
<p>try</p>
<p>ScrollBar1.Max := ScrollBar1.Min-1;</p>
<p>except</p>
<p>on E: EInvalidOperation do</p>
<p>MessageDlg('Ignoring Exception:'+E.Message,</p>
<p>mtInformation,[mbOK],0);</p>
<p>end;</p>
<p>end; </p>
<p>12.3.2 <font face="宋體" lang="ZH-CN">提供缺省響應 </p>
<p>  在異常響應模塊中,一般我們只對希望響應的特定異常進行處理。如果一個異常發生而響應模塊并沒有包含對它的處理代碼,則退出當前響應模塊,異常類仍被保留。</p>
<p>  為了保證任何異常發生后都能在當前響應模塊中被清除,可以定義缺省響應: </p>
</font><p>try</p>
<p>{<font face="宋體" lang="ZH-CN">程序正常功能}</font></p>
<p>except</p>
<p>on ESomething do</p>
<p>{<font face="宋體" lang="ZH-CN">響應特定異常}</font></p>
<p>else</p>
<p>{<font face="宋體" lang="ZH-CN">提供缺省響應}</font></p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN">由于</font>else<font face="宋體" lang="ZH-CN">可以響應任何異常,包括我們一無所知的異常,因此在缺省響應中最好只包括諸如顯示一個消息框之類的處理,而不要改變程序的運行狀態或數據。 </p>
</font><p>12.3.3 <font face="宋體" lang="ZH-CN">響應一族異常 </p>
<p>  諸如</p>
</font><p><font face="宋體" lang="ZH-CN">    on ExceptionType do</font></p>
<font face="宋體" lang="ZH-CN"><p>的異常響應語句不僅可響應本類異常,而且可以響應子類異常。對于象</font>EIntError<font
face="宋體" lang="ZH-CN">、</font>EMathError<font face="宋體" lang="ZH-CN">等系統不會引發的異常,它們將只響應其子類異常。而對于象</p>
<p>   </font>on Exception do</p>
<font face="宋體" lang="ZH-CN"><p>這樣的語句將會對任何異常進行響應。</p>
<p>  下面一段代碼對整數越界異常進行單獨處理,而對其它整數異常進行統一處理: </p>
<p>  </font>try</p>
<p>{<font face="宋體" lang="ZH-CN">整數運算}</font></p>
<p>except</p>
<p>on ERangeError do</p>
<p>{<font face="宋體" lang="ZH-CN">越界處理}</font></p>
<p>on EIntError do</p>
<p>{<font face="宋體" lang="ZH-CN">其它整數異常處理}</font></p>
<p>end;<font face="宋體" lang="ZH-CN"> </font></p>
<p><font face="宋體" lang="ZH-CN">由于異常在處理后即被清除,因而上面的代碼可保證不會使</font>ERangeError<font
face="宋體" lang="ZH-CN">異常被多次處理。假如顛倒兩條響應語句的順序,則</font>ERangeError<font
face="宋體" lang="ZH-CN">異常響應將永遠沒有被執行的機會。 </p>
<p>  由于異常在處理后即被清除,因而當希望對異常進行多次處理時就需要使用保留字</font>raise<font
face="宋體" lang="ZH-CN">來重引發一個當前異常。</p>
<p>  下面的代碼同時使用了異常響應和異常保護。異常響應用于設置變量的值,異常保護用于釋放資源。當異常響應結束時利用</font>raise<font
face="宋體" lang="ZH-CN">重引發一個當前異常。 </p>
</font><p>var</p>
<p>APointer: Pointer ;</p>
<p>AInt , ADiv: Integer;</p>
<p>begin</p>
<p>ADiv := 0;</p>
<p>GetMem ( APointer , 1024 );</p>
<p>try</p>
<p>try</p>
<p>AInt := 10 div ADiv ;</p>
<p>except</p>
<p>on EDivByZero do</p>
<p>begin</p>
<p>AInt := 0 ;</p>
<p>raise;</p>
<p>end;</p>
<p>end; </p>
<p>finally</p>
<p>FreeMem ( APointer , 1024 );</p>
<p>end;</p>
<p>end;</p>
<font face="宋體" lang="ZH-CN"><p>  上面一段代碼體現了異常處理的嵌套。異常保護、異常響應可以單獨嵌套也可以如上例所示的那樣相互嵌套。 </p>
</font><p>12.3.5 <font face="宋體" lang="ZH-CN">自定義異常類的應用 </p>
<p>  利用</font>Delphi<font face="宋體" lang="ZH-CN">的異常類機制我們可以定義自己的異常類來處理程序執行中的異常情況。同標準異常不同的是:這種異常情況并不是相對于系統的正常運行,而是應用程序的預設定狀態。比如輸入一個非法的口令、輸入數據值超出設定范圍、計算結果偏離預計值等等。</p>
<p>  使用自定義異常需要:</p>
<p>  </font>1.<font face="宋體" lang="ZH-CN">自己定義一個異常對象類;</p>
<p>  </font>2.<font face="宋體" lang="ZH-CN">自己引發一個異常。 </p>
</font><p>12.3.5.1 <font face="宋體" lang="ZH-CN">定義異常對象類 </p>
<p>  異常是對象,所以定義一類新的異常同定義一個新的對象類型并無太大區別。由于缺省異常處理只處理從</font>Exception<font
face="宋體" lang="ZH-CN">或</font>Exception<font face="宋體" lang="ZH-CN">子類繼承的對象,因而自定義異常類應該作為</font>Exception<font
face="宋體" lang="ZH-CN">或其它標準異常類的子類。這樣,假如在一個模塊中引發了一個新定義的異常,而這個模塊并沒有包含對應的異常響應,則缺省異常處理機制將響應該異常,顯示一個包含異常類名稱和錯誤信息的消息框。</p>
<p>  下面是一個異常類的定義: </p>
<p>  </font>type</p>
<p>EMyException = Class(Exception) ;<font face="宋體" lang="ZH-CN"> </font></p>
<p>12.3.5.2 <font face="宋體" lang="ZH-CN">自引發異常 </p>
<p>  引發一個異常,調用保留字</font>raise<font face="宋體" lang="ZH-CN">,后邊跟一個異常類的實例。</p>
<p>  假如定義: </p>
</font><p>type</p>
<p>EPasswordInvalid = Class(Exception); </p>
<p><font face="宋體" lang="ZH-CN">則在程序中如下的語句將引發一個</font>EPasswordInvalid<font
face="宋體" lang="ZH-CN">異常: </p>
</font><p><font face="宋體" lang="ZH-CN"> </font>If Password &lt;&gt; CorrectPassword
then</p>
<p>raise EPasswordInvalid.Create('Incorrect Password entered');</p>
<font face="宋體" lang="ZH-CN"><p>  異常產生時把</font>System<font
face="宋體" lang="ZH-CN">庫單元中定義的變量</font>ErrorAddr<font face="宋體"
lang="ZH-CN">的值置為應用程序產生異常處的地址。在你的異常處理過程中可以引用</font>ErrorAddr<font
face="宋體" lang="ZH-CN">的值。</p>
<p>  在自己引發一個異常時,同樣可以為</font>ErrorAddr<font
face="宋體" lang="ZH-CN">分配一個值。</p>
<p>  為異常分配一個錯誤地址需要使用保留字</font>at<font
face="宋體" lang="ZH-CN">,使用格式如下: </p>
<p>  </font>raise EInstance at Address_Expession; </p>
<p>12.3.5.3 <font face="宋體" lang="ZH-CN">自定義異常的應用舉例  </p>
<p>下面我們給出一個利用自定義異常編程的完整實例。</font></p>
<p><font face="宋體" lang="ZH-CN">兩個標簽框</font>(Label1<font face="宋體"
lang="ZH-CN">、</font>Label2)<font face="宋體" lang="ZH-CN">標示對應編輯框的功能。編輯框</font>PassWord<font
face="宋體" lang="ZH-CN">和</font>InputEdit<font face="宋體" lang="ZH-CN">用于輸入口令和數字。程序啟動時</font>Label2<font
face="宋體" lang="ZH-CN">、</font>InputEdit<font face="宋體" lang="ZH-CN">不可見。當在</font>PassWord<font
face="宋體" lang="ZH-CN">中輸入正確的口令時,</font>Label2<font face="宋體"
lang="ZH-CN">、</font>InputBox<font face="宋體" lang="ZH-CN">出現在屏幕上。此時</font>Label1<font
face="宋體" lang="ZH-CN">、</font>PassWord<font face="宋體" lang="ZH-CN">隱藏。</font></p>
<p><font face="宋體" lang="ZH-CN">設計時,令</font>Label2<font face="宋體"
lang="ZH-CN">、</font>InputEdit<font face="宋體" lang="ZH-CN">的</font>Visible<font
face="宋體" lang="ZH-CN">屬性為</font>False<font face="宋體" lang="ZH-CN">。通過設置</font>PassWord<font
face="宋體" lang="ZH-CN">的</font>PassWordChar<font face="宋體" lang="ZH-CN">可以確定輸入口令時回顯在屏幕上的字符。</font></p>
<p><font face="宋體" lang="ZH-CN">自定義異常</font>EInvalidPassWord<font
face="宋體" lang="ZH-CN">和</font>EInvalidInput<font face="宋體" lang="ZH-CN">分別用于表示輸入的口令非法和數字非法。它們都是自定義異常</font>EInValidation<font
face="宋體" lang="ZH-CN">的子類。而</font>EInValidation<font face="宋體"
lang="ZH-CN">直接從</font>Exception<font face="宋體" lang="ZH-CN">異常類派生。</font></p>
<p><font face="宋體" lang="ZH-CN">下面是三個異常類的定義。 </p>
</font><p>type</p>
<p>EInValidation = class(Exception)</p>
<p>public</p>
<p>ErrorCode: Integer;</p>
<p>constructor Create(Const Msg: String;ErrorNum: Integer);</p>
<p>end;</p>
<p>EInvalidPassWord = class(EInValidation)</p>
<p>public</p>
<p>constructor Create;</p>
<p>end;</p>
<p>EInvalidInput = class(EInValidation)</p>
<p>public</p>
<p>constructor Create(ErrorNum: Integer);</p>
<p>end; </p>
<p>EInValidation<font face="宋體" lang="ZH-CN">增加了一個公有成員</font>ErrorCode<font
face="宋體" lang="ZH-CN">來保存錯誤代碼。錯誤代碼的增加提供了很大的編程靈活性。對于異常類,可以根據錯誤代碼提供不同的錯誤信息;對于使用者可以通過截取錯誤代碼,在</font>try...except<font
face="宋體" lang="ZH-CN">模塊之外來處理異常。</font></p>
<p><font face="宋體" lang="ZH-CN">從以上定義可以發現:</font>EInvalidPassWord<font
face="宋體" lang="ZH-CN">和</font>EInvalidInput<font face="宋體" lang="ZH-CN">的構造函數參數表中沒有表示錯誤信息的參數。事實上,它們保存在構造函數內部。下面是三個自定義異常類構造函數的實現代碼。 </p>
</font><p>constructor EInValidation.Create(Const Msg: String; ErrorNum: Integer);</p>
<p>begin</p>
<p>inherited Create(Msg);</p>
<p>ErrorCode := ErrorNum;</p>
<p>end;</p>
<p>constructor EInValidPassWord.Create;</p>
<p>begin</p>
<p>inherited Create('Invalid Password Entered',0);</p>
<p>end;</p>
<p>constructor EInValidInput.Create(ErrorNum: Integer);</p>
<p>var</p>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩理论在线观看| 久久久精品综合| 日本电影欧美片| 91丝袜美女网| 日本道在线观看一区二区| 色婷婷av久久久久久久| 色哟哟精品一区| 在线亚洲一区观看| 欧美性受xxxx| 欧美一二三四区在线| 欧美成人一区二区三区片免费 | 亚洲国产精品传媒在线观看| 久久久亚洲精品石原莉奈| 国产午夜久久久久| 国产精品午夜电影| 一区二区三区在线高清| 亚洲一二三区在线观看| 麻豆视频一区二区| 国产精品一区二区不卡| 99在线热播精品免费| 欧美影片第一页| 久久一夜天堂av一区二区三区 | 91免费观看视频| 欧美亚一区二区| 精品国产免费一区二区三区四区| 久久久久久久久免费| 亚洲欧美在线另类| 五月婷婷综合激情| 国产一区二区三区美女| 日本丶国产丶欧美色综合| 日韩精品一区二区三区四区 | 国产精品久久久久久户外露出| 亚洲男人天堂av网| 首页亚洲欧美制服丝腿| 成人免费观看av| 7777精品久久久大香线蕉| 国产日韩高清在线| 日韩在线一区二区三区| 丁香一区二区三区| 欧美日韩国产精品成人| 中文乱码免费一区二区 | 91精品黄色片免费大全| 国产精品国产三级国产有无不卡| 五月婷婷激情综合网| 成人一区二区三区| 欧美变态口味重另类| 亚洲综合一区二区精品导航| 欧美午夜在线一二页| 国产欧美一区二区在线观看| 日产国产高清一区二区三区| 色婷婷亚洲婷婷| 国产精品久线观看视频| 精品一区二区成人精品| 欧美美女激情18p| 亚洲视频香蕉人妖| 成人亚洲一区二区一| 欧美电影免费观看完整版| 亚洲图片欧美色图| 色诱视频网站一区| 国产精品短视频| 国产精品综合av一区二区国产馆| 日韩一区二区在线播放| 性做久久久久久久免费看| 91官网在线免费观看| 亚洲欧美怡红院| 成人福利在线看| 中文字幕不卡在线播放| 国产精品资源网站| 精品国产伦一区二区三区观看方式 | 日韩欧美国产小视频| 日韩精品免费专区| 欧美美女黄视频| 丝袜国产日韩另类美女| 91精品国产手机| 久久精品国产免费| 久久久久久久电影| 国产二区国产一区在线观看| 国产日韩精品一区二区三区在线| 国产成人午夜精品影院观看视频| 国产日韩欧美高清在线| 不卡的av电影| 亚洲视频精选在线| 欧美在线观看禁18| 五月激情丁香一区二区三区| 91精品国产91久久久久久一区二区| 日韩和欧美一区二区| 日韩欧美成人一区| 欧美日韩小视频| 美女看a上一区| 国产日韩综合av| 色吧成人激情小说| 日韩电影在线观看网站| xfplay精品久久| www.成人网.com| 图片区日韩欧美亚洲| 精品国产乱码久久久久久久久| 国产一区二区免费看| 亚洲三级小视频| 欧美精品v国产精品v日韩精品| 国内不卡的二区三区中文字幕| 国产精品乱人伦| 欧美色图天堂网| 国内成人自拍视频| 亚洲欧洲99久久| 欧美一区二区三区在线视频| 国产传媒久久文化传媒| 尤物视频一区二区| 日韩欧美一区中文| 成人午夜电影小说| 午夜伊人狠狠久久| 欧美激情一二三区| 日韩三级伦理片妻子的秘密按摩| 国产乱人伦偷精品视频免下载| 国产精品乱子久久久久| 日韩亚洲欧美高清| 91麻豆成人久久精品二区三区| 日韩av不卡一区二区| 亚洲色大成网站www久久九九| 樱桃视频在线观看一区| 26uuu亚洲| 欧美探花视频资源| 成人国产在线观看| 麻豆精品国产传媒mv男同| 一区在线播放视频| 精品成人一区二区三区四区| 欧洲日韩一区二区三区| 国产成人av福利| 美国精品在线观看| 亚洲国产另类av| 亚洲欧美在线视频| 国产亚洲精品7777| 日韩一区二区三区视频| 欧洲精品一区二区三区在线观看| 成人精品视频一区| 国产麻豆成人传媒免费观看| 日韩精品乱码av一区二区| 伊人性伊人情综合网| 中文文精品字幕一区二区| 日韩女优视频免费观看| 欧美调教femdomvk| 色激情天天射综合网| 久久久综合九色合综国产精品| 欧美精品电影在线播放| 欧美性淫爽ww久久久久无| 色偷偷88欧美精品久久久| 91一区二区在线| av一二三不卡影片| av一二三不卡影片| 99久久精品国产网站| 不卡视频一二三四| 成人av一区二区三区| 97精品超碰一区二区三区| 成人免费视频app| 97精品久久久久中文字幕 | 91国产视频在线观看| 色综合色狠狠综合色| 色综合天天天天做夜夜夜夜做| 色综合天天综合色综合av| 不卡视频一二三四| 91小视频免费看| 色综合久久88色综合天天6| 色网综合在线观看| 欧美丰满少妇xxxxx高潮对白 | 久久精品国产亚洲一区二区三区| 老司机午夜精品| 国产精品自在在线| 99久久精品国产毛片| 欧美私人免费视频| 欧美成人免费网站| 国产欧美日本一区二区三区| 国产精品久久久久影院亚瑟| 亚洲自拍偷拍综合| 免费成人你懂的| 国产suv精品一区二区6| 日本高清成人免费播放| 欧美日韩mp4| 久久影院视频免费| 亚洲特黄一级片| 图片区小说区区亚洲影院| 国产精品资源在线观看| 91免费版在线| 欧美一区二区播放| 中文字幕精品在线不卡| 亚洲网友自拍偷拍| 国产一区二区三区免费| 91美女视频网站| 欧美一区二区三区日韩视频| 中文字幕不卡的av| 午夜国产精品一区| 成人美女视频在线观看18| 欧美三级视频在线| 国产女主播一区| 婷婷中文字幕综合| 国产成都精品91一区二区三| 欧美三级电影精品| 国产精品久久影院| 久久99国产乱子伦精品免费| 欧美在线免费观看视频| 国产精品国产自产拍高清av| 蜜桃精品视频在线|