finally文の使用状況との違いを試してみ除くデルファイ試してみます

まず、珍しい起源
  Delphiアプリケーションでは、次のような状況では、異常生成する可能性が高くなります。  
  (1)ファイルの処理  
  (2)メモリ割り当て  
  (3)Windowsリソースの 
  作成(4)実行時のオブジェクトとフォーム  
  (5)ハードウェアとオペレーティングシステムが競合
   
  第二に、例外処理
  を除いて...終わり...(1)を試して   、
  in vivoでの試みを異常コードが発生し、システムが例外処理以外の部分をオンにします。Delphiは、例外を処理するための最も基本的な方法の一つです。
  
  (2)...最後に...最後にしようと   、
  この構造化例外処理は、一般的に、Windowsのリソースの割り当てや他の側面を保護するために使用され、それは、Windowsの数にかかわらず、コードの本体を試すオブジェクトことを保証し、最終的な統一されたシステムによって処理される異常、必要があります正しい治療。  
  そして、してみてください...除いて...違う終わり、最終的には構造の全体の部分が実行されます。
  
  (3)...を除いて最後に...してみてください ...エンドの両方の例外処理を達成するためには、コンフィギュレーションは、ネストされた試しが...最後に...端部構造が存在しないことができます以外...終わり...してみてください、しかし、構造の両方の例外、保護構造と資源配分を扱います、だけでなく、リソースの割り当てを保護します。
  
  第三に、正確な例外処理
  (1)は、例外を定義しています。  
  Delphiでは、各異常例外[1]であるクラスの派生クラス[2]です。したがって、例外の定義は、例外から派生したクラスの定義です。  
  EMyException =クラス(例外)を入力。  
  もちろん、基本クラスは、任意の例外例外または任意の派生クラス階層であってもよいです。
  
  (2)プログラムに例外をスローします。  
  例外をスローすると、状況に応じて異常の最も基本的なパターンを使用することです。Delphiでは、RAISE文によって実装されています。  
  文法.Create昇給の例外クラス(「デフォルトの例外命令」);
  
  (3)してみてください...除いて...キャプチャより正確な異常の終わり。  
  Eの使用:...例外クラス構造の特定の例外クラスは、in vivoでないスローされた例外を処理することができます。
  
  第四に、異常なデバッグ
  「デバッガオプション」をリリースデルファイIDEでは、統合されたデバッグが異常デバッグすることができた状態のチェックボックス(あなたは、メニュー[ツール] - > [デバッガオプション...アクセスを使用することができます)。
  
  V.異常サプリメント
  (1)プログラムの各セクションは、エラーが発生する可能性があります!これは、現象と疑う余地のないソフトウェア業界の法律です。実際には、場合... ELSE ...伝統的な構造は、すべてのエラーを解決することができ、使用の例外メカニズムはなぜ例外メカニズム、そして、可能横断することによって、異常なアプローチを生成するために、最も原始的なレベルでは回避することはできませんか?
  
  答えは明らかである:異常後でプログラマはなく事前に定義された処理結果を用いて、より実際の状況に応じて、このエラーを処理できるように、より柔軟でオープンな方法を提供します。

取り扱いDelphi7例外
異常と異常なクラスDelphi7が設けられているかを理解するために
、マスターの自己定義されたメソッドの異常や例外Delphi7環境下
ハンドル文法構造と実装

異常な

何珍しい
プログラムの開発プロセスは、コンパイル時エラーが簡単に見つけることです、コンパイルエラーと実行時エラーがあると、実行時エラーは、(論理エラーや例外)は、多くの場合、予測することは困難である。プログラムの安定性と信頼性のために、あなたがする必要があります例外処理と保護のための手続き。

例外:イベントが発生した場合、通常のプログラム実行が中断される特別なイベント、として理解する
異常な状況ではなく、例外のプログラムエラーによって引き起こされ、例外はバグが同じ概念ではありません。
異常が容易にすることですユーザーがエラーを報告し、作成したエラー処理メカニズムは、一般的にオペレーティングシステムによって行われます。
ランタイムエラーハンドリング

:ソフトウェア開発プロセスは、プログラマは一般的な手順に従って必然的なエラーを処理するための適切な方法を提供しなければならない
1従来法
2例外エラー処理を使用して

伝統的な方法
パスカルの以前のバージョンでは、プログラマがエラーの存在を検出するためのコンパイラスイッチ、および状態変数およびプロセスを使用する必要があります。

- {$ I} {このコンパイラは、命令は、I / O検出オフにする}
;割り当て(INFILE、InputName)
リセット(INFILE);
{$ I +} {このコンパイラディレクティブ再開I / O検出}
もしIOResult0次いで
{エラーハンドリングコード}。

エラー処理のための使用の例外

構造化例外処理は、異常な特性は、我々は二つの側面を扱っている便利なハンドル例外提供デルファイの言語に組み込まれている:
1。例外ハンドリング性を保証資源の適切な配分を、またはアプリケーションの変更復元
2構造化例外処理をこれは、開発者のための方法の様々な種類を扱う一貫したランタイムエラーを提供します

Delphi7の例外処理メカニズム

基本的な考え方は、プロセスをより堅牢にするハードウェアエラーの能力をソフトウェアの標準化された方法を提供することによって、例外処理プロセスである。
例外処理プロセスは、通常の論理処理コード相を分離したエラーコードであってもよい。
アプリケーションで受信されたDelphiのデフォルト.IDEの前にキャプチャする例外例外は、「早期警告」をアプリケーションが例外になることを示すために、ダイアログボックスを提供します。
メカニズムを例外処理がしようと最後の文で、知的ブロックの保護に基づいており、プログラミング、セキュリティポリシーであり、プログラム例外が発生した場合、正常に実行したり、リソースを解放するためのプログラムが占有することをパッケージのコードブロックを保証します。

Delphi7の例外処理メカニズム

従来のプログラミングにおいて、以下確認する擬似コード方式とエラーハンドラを有します。

タスクを実行する
前に、タスクが正しく実行されていない場合は
エラー処理が実行される
次のタスクを実行する
タスクが正しく実行されていない場合は前の
エラー処理を実行する
......

機構の取り扱いDelphi7例外
実施形態を、

= StrToInt(Edit1.Text); ShowMessage(フォーマット( '生まれ%d個の今年、[YearOf(今) - 年齢])); DO showmessageを除いて(「ではない有効なデジタル入力エディットボックス:年齢を試してみてください! 「); ERangeError DO showmessage上の(」「エディットボックスの年齢が大きすぎる入る);!終了。 

例外クラス
Delphi7異常対応する例外クラスの種類に応じて定義。すべての基本クラスは例外クラスの例外クラスである。
Delphi7は、ユーザーことができ、カスタム例外クラスの例外クラスの例外クラスの数を建てました。

例外クラスを覚えておくべきポイント:
1.例外クラスは異なる異常の入り口の応答である
例外クラスの階層構造に精通2。

例外例外クラス

Exceptionクラスは、それが最初に「T」ではないですが、また、派生クラス「E」最初に基づいています「E」、で始まる、すべての例外の基底クラスです。
SysUtilsユニットで定義された例外クラスです。
例外最も一般的なメソッドが作成する方法であって、
コンストラクタは(MSG CONST:String)を作成します。
(「!異常自分が作成した」)Exception.Create;
例外クラスのインスタンスを作成するために使用される方法は、あなたはまた、エラーメッセージを表示することができ、それを使用することもできますこのメソッドは、例外提出
昇給Exception.Createを(「!私は例外をスロー」);

例:

トライ昇給Exception.Create( '私は例外を投げる!'); Eを除く:(:+ E.ClassName +#13#10 + '例外メッセージ:' + E.Message '例外クラス名')例外がshowmessageを行います; END; 

構築されたDelphi7例外クラス
Delphi7は、異常の種類に応じて、それぞれの例外クラスを定義し、まだこれらの例外クラスは、Delphi7例外クラスを構築しました。

特定のランタイムライブラリの例外クラス、オブジェクトやコンポーネントの例外クラスの例外クラスの3つのカテゴリに分類。

例外ベースのランタイムライブラリ(RTL)
ライブラリは、以下の例外クラスの実行時に分割することができる
1~2の整数演算異常浮動小数点演算ハードウェア・エラー例外3 4 5 Oスタック異常異常(I / O例外)6 7文字変換例外8キャストダミー異常異常

整数計算異常

EIntError整数演算エラー(クラスイル)
EDivByZero整数で0オーバーフロー以外
EIntOverFlow整数オーバーフロー
ERangeError整数境界

異常な浮動小数点演算

例外(基底クラス)EMathError浮動小数点
EInvalidOpは、浮動小数点演算命令を無効
EOVERFLOW浮動小数点演算オーバーフロー
Eunderflow浮動小数点演算アンダーフロー
EZeroDivide浮動小数点加算0

ハードウェアの例外

EProcessorExceptionハードウェア例外(基本クラス)
ESingleStepアプリケーションが割り込みシングルステップ生成
Ebreakpointアプリケーションが割り込み、ブレークポイントを生成
(基底クラスである、EProcessorException継承)EFAULT障害を
プロセッサ・スタック・セグメントへの不正アクセスをEStackFault
正しいスワップファイルEPageFaultメモリマネージャは使用できません
EGPFaultをGPFは、一般にオブジェクトまたは初期化されていないポインタによって引き起こさ
EInvalidOpCode未定義命令プロセッサ遭遇

そして、例外スタック(I / O例外)
スタック例外:

操作が完了するEOutOfMemoryのヒープメモリが不足してい
EInvalidPointerは外スタックポインタアクセスしようとします
(I / O例外)
EInOutError DOS入力/出力エラーを

異常とダム異常な文字変換/キャスト

文字変換の例外
の文字列または、文字列から数値へのEConvertError番号
ワード変換エラー

異常な型変換

EInvalidCast異常型変換

異常ダム

EAbortはアボートメッセージボックスが表示されていないエラーが発生し呼び出します

例外クラスオブジェクト
アン・オブジェクト・クラスは、オブジェクト定義による異常非異常成分のためのものである
含むオブジェクト例外クラス:

1つのフロー例外クラス
2印刷例外クラス
3クラス異常パターン
4列例外クラスリスト

フロー例外クラス

これは、プログラムに関連流れる作動中に発生する異常流量異常を指す。基本ストリームクラス例外クラスはEStreamErrorあり、他のクラスがそこから直接または間接的に誘導された異常を流れる。
派生関係本図を参照してください。48

異常な印刷

印刷はプリンタに印刷コマンドを送信し、異常原因のアプリケーションです何らかの理由場合や、プリンタに印刷ジョブを開始することができないために存在していません。
単位のプリンタで定義されたプリント例外クラスEprinter、

グラフィックの異常

EInvalidGraphicを含む異常なパターン
EInvalidGraphicOperation二つのクラスは、グラフィックスセクションで定義されています

EInvalidGraphic例外は、次のような状況のとき1を提起しました。

カスタムグラフィックファイルの種類は、画像を充電。アプリケーションは、ビットマップ、画像、またはメタファイルのユーザーへの有効な試みが含まれていない場合は
、ファイルの拡張子をロードするアプリケーションの試みが認識されないとき
とき画像これは、形式又はLoadFromClipboardFormat SaveToClipboardFormatと一致しない。
アプリケーション試みがPixelFormatプロパティの値をサポートしていない画像を設定する場合

次のいずれかの条件が発生EInvalidGraphicOperation例外:

アクセスへの走査線では、アプリケーションは、画像内に存在しません。
アプリケーションが正常に画像に書かれていない場合。
アプリケーション塗料をキャンバスがアクティブでないとき。
アプリケーションが不明またはサポートされていない画像形式をロードしました。
アプリケーションを番組画像がサポートされていないPixelFormatプロパティ値に設定されている
操作を処理するために割り当てることができません。

異常な文字列リスト

ユーザーの文字列リストは、不正操作が開始異常な文字列リストに起因するものである。
等などEStringListError、EListError、構成要素の多くは、性質(例えば、アセンブリ、等のアイテムプロパティTiistbox)TStringsは抽象クラス、従って異常な文字列リストを有するのでそれは、アセンブリプログラミングで重要です。

文字列リストEListError境界例外は通常、次の場合に発生した場合にEStringListError一般的に生成されました:

インデックスは、エントリのリストの範囲を超えた場合
、文字列のリストプロパティセットdupError重複する場合
、同時にアプリケーションの試行が繰り返された文字列に参加する。
文字列に文字列がソートされたリストに挿入されたとき。

コンポーネントの例外クラス

アセンブリ応答成分例外例外クラス、コンポーネントはVCLコンポーネントの異常動作によるものである、使用規則及びトリガ部品の特性に違反して、2つのカテゴリに分けることができる:
汎用コンポーネント例外、特別な例外コンポーネント、汎用コンポーネント例外。
異常が共通の不正な操作です、異常と異常部品の不足はEInvalidOpetation、EComponentErrorとEOutOfResource例外クラスに対応するリソースの3種類です。

異常な不正な操作の原因は以下のとおりです。

親アプリケーションの試みは、アセンブリゼロのウィンドウハンドルのために必要な属性の一部を操作することができます。
フォームのドラッグ&ドロップ操作しようとしています。

異常なコンポーネントの原因は、次のとおり
Delphiのコンポーネントを登録できません

アプリケーションは、コンポーネント名前の変更はできません
アプリケーションは、ウィンドウハンドルを作成しようとすると、オペレーティング・システムは、余分な割り当てを扱うことができないときは、不足リソース例外が原因であるがスローされます

例外特定成分:多くのコンポーネントは、対応するコンポーネントクラスの例外を定義します。

いくつかの典型的なコンポーネントリストされている例外クラス:

EMenuError異常、異常メニュー、プログラムが起動メニューの不正操作によるものである。で定義されたMemus部
EInvalidGridOperation異常。そのような基準格子セルを開始しようとすると、存在しない場合など不正グリッド操作、。で定義されたグリッドユニット
EDatabaseError異常データベースが異常に起因データベースの不正操作によるものです。

ユーザー定義の例外クラス

ユーザ定義の例外クラスのメソッドを作成します。

カスタム例外スロー
例外クラスを内蔵したカスタム例外クラスの違い
例外クラスのオブジェクトとオブジェクトの他の種類を区別し
、ユーザーのカスタム例外クラスのメソッドを作成します

例外はそれにカスタム例外クラスを作成するには、ベースクラス、一般的な方法のクラス定義として選択した。
同様に:

EMyExceptionを入力し、所望の、ここ端書き込むことができる場合=クラス(例外)//プロパティまたはメソッドを定義します。 

スローカスタム例外
Delphiがスローされるユーザ定義の例外を管理していない、プログラマ自身が身を投げなければならraise文は例外をスローして作成しました:

昇給EMyException.Create( 'マイ例外'); 

ユーザー定義の例外クラス区分と構築された例外クラス

Delphiはありません自動的にするユーザー定義の例外クラスへの対応、ユーザ定義の例外クラスは、例外クラスを内蔵し、例外が発生したときに対応する実異常を実行しながら、raise文の使用は、スロー必要として、オペレーティングシステムがキャプチャされますこの例外、応答へのデルファイの通知。

Exceptionクラスのオブジェクトは、オブジェクトの他のクラスと異なっています

例外クラスのオブジェクトが作成された後、例外処理は、システムが自動的にデストラクタリリース例外クラスのオブジェクトを呼び出したときに、他のクラスは、ユーザによって解放されなければならない一方で、利用者は、それを解放する必要はありません。

Delphi7の例外処理構造

してみてください... finally文ブロック
試しを...文ブロックを除いて
スロー昇給を使用して

試して... finally文ブロック
してみてください... finally文ブロックは資源保護とリカバリシステムの状態のために使用され、関係なく、操作の有無一部の例外を試し発生し、操作の最後に一部が実行されるべきである。
構文以下:

最後(にかかわらず、例外が発生するかどうかの、対処されなければならない)文を処理finally文を保護することを試みます。 

してみてください... finally文のブロックは主に環境保全のために使用されています

これらのリソースが必要とされないシステムリソース(例えば、メモリ、グラフィックハンドル)のアプリケーションに適用される、リソースが速やかに解放されるべきである。
ハンドル:システム・リソースが制限され、一般的にリソースチェーンを構成する、鎖長が制限され、場合にシステムアプリケーションプログラム、各ID番号のためのリソースのセットに割り当てられたリソース、ID番号がハンドルである(部屋番号の部屋に対応するシステムリソース、及びハンドル相当する。)。
限られたハンドル:1つのリソースが限られています。範囲の2デジタル表現は(整数の範囲で)制限されています

試してみてください...ステートメントブロックを除い
てみてください...エラー処理のステートメントブロックの動作を除いて、プログラマは例外処理の異なるタイプの書き込みに使用することができます。
例外が発生し、異常決意のタイプは、正しく例外を処理します。

試してみてください...一般的な文ブロックとで...一緒にDO句を除き、
構文は次のとおりです。

機能テスト(X、Y:実質):実;トライの検索結果を開始:= X / Y; EInvalidOpを除く//保護された文は結果の操作を行います= 0; EZeroDivide上の文を処理//例外が検索結果を実行します= 0; EOVERFLOWに検索結果を実行します= 0; EUnderFlowで検索結果を実行します= 0;最後に、終わりを、 

試してみてください...ブロックメイン処理文デフォルトの例外を除き
、ユーザーは、一般的に唯一のいくつかの特別な例外を扱う、すべての例外を処理しません。これらのユーザーは、異常を気にしないためにハンドルにデフォルトの例外を使用することができます。

EExceptionClassを除い//通常のプログラムコードを試してみません//他の端を例外処理の特定のタイプを扱う//デフォルトの例外。 

注:他にそれが最後のブロック以外のブロックに配置する必要があり、異常応答のいずれかのタイプ

異常配達

コールスタックの処理Delphiの例外が後方スキャンプログラムである。プロセスAの保護コードブロック内がプロセスは、ターンのコードブロックは、プロセスBを呼び出す場合、プロセスBには障害保護されていない、手順Bは、手順Cを呼び出します異常がCで例外処理プログラムとしてC.において生じる、プログラムは、コードCの例外処理を呼び出し

おすすめ

転載: www.cnblogs.com/delphixe/p/12375550.html