イベントの例外が、これは、プログラムの実行中に発生し、通常の流れを妨害して、プログラムの指示に従ってください。
例外の手段を提供して個別の詳細が何をすればいいのうち、普通の時に何かが起こってから、メインプログラムロジックをします。 伝統的なプログラミングでは、エラー検出、レポート、および処理しばしば混乱につながるスパゲティコードします。 たとえば、ここに法pseudocode考慮して全体を読み込みしてファイルをメモリ:
(するreadfile
ファイルを開く;
その大きさを決定する;
多くのメモリを割り当てること;
読んで、ファイルをメモリ;
ファイルを閉じて;
)
一目見て、この機能を十分に単純なようだが、それを無視し、次のすべての潜在的なエラー:
|
|
•何が起こっている場合はファイルを開いたことはできませんか?
•何が起こっている場合は、ファイルの長さを決定できないですか?
•どうすれば十分なメモリが割り当てられたことはできませんか?
•読み取りに失敗した場合はどうなりますか?
•何が起こっている場合はファイルを閉じたことはできませんか?
を扱うような場合は、その他のコードでreadfile関数を行う必要がありエラー検出、レポート、および処理します。 ここでは、どのような機能の例は次のように:
errorcodetypeするreadfile (
初期化するとunixodbc = 0 ;
ファイルを開く;
もし( thefileisopen ) (
ファイルの長さを決定する;
もし( gotthefilelength ) (
多くのメモリを割り当てること;
もし( gotenoughmemory ) (
読んで、ファイルをメモリ;
もし( readfailed ) (
とunixodbc = -1 ;
)
他の( )
とunixodbc = -2 ;
)
他の( )
とunixodbc = -3 ;
)
ファイルを閉じて;
もし( & & thefiledidntcloseとunixodbc == 0 ) (
とunixodbc = -4 ;
他の( )
とunixodbc =とunixodbcと-4 ;
)
他の( )
とunixodbc = -5 ;
)
返すとunixodbc ;
)
でも本当にいろいろなエラー検出、報告は、こことリピートして、元の7行のコードが失われたのは、煩雑します。 さらに悪いことには、論理の流れに失われたコードにも、このようにすることが困難かどうかを教えコードが正しいことをやっている:実際には、ファイルを閉じて関数が失敗した場合は十分なメモリを割り当てることですか? それはさらに多くの困難にコードを続けていることを確認したときに正しいことを行う方法を変更して3カ月後に書き込みしてください。 多くのプログラマはこの問題を解決するだけでは無視さiterrorsが報告されたとき、プログラムクラッシュします。
例外を有効にメインの流れを書く際に、お客様のコードおよび他の例外的な場合に対処します。 例外の代わりに使用された場合は機能するreadfileの伝統的な経営手法にエラーが発生し、それはさらに次のような目:
(するreadfile
お試し(
ファイルを開く;
その大きさを決定する;
多くのメモリを割り当てること;
読んで、ファイルをメモリ;
ファイルを閉じて;
た) catch ( fileopenfailed ) (
dosomething ;
た) catch ( sizedeterminationfailed ) (
dosomething ;
た) catch ( memoryallocationfailed ) (
dosomething ;
た) catch ( readfailed ) (
dosomething ;
た) catch ( fileclosefailed ) (
dosomething ;
)
)
例外に注意していないスペアあなたの仕事をして努力を検出し、レポート、およびエラーを処理する、かれらの仕事を整理し、より効果的にお手伝いします。
2つ目の利点は、例外エラーが発生し繁殖能力を報告するコールスタックのメソッドをします。 と仮定してないreadfileメソッドは、メソッドの第4シリーズのメソッド呼び出しネストされたメインプログラム: method1コールmethod2 、 method3が呼び出され、最後にコールするreadfile :
( method1
コールmethod2 ;
)
( method2
コールmethod3 ;
)
( method3
コールするreadfile ;
)
method1と仮定しても法に興味があるだけでは、エラーが発生するかもしれないreadfileしています。 エラー通知の伝統的な技術力とmethod2 method3に反映するreadfile返されるエラーコードをするコールスタックエラーコードの最後に到達するまでの方法ではmethod1theのみに興味があること:
( method1
エラーが発生しerrorcodetype ;
エラーが発生しmethod2 =コール;
もし(エラー)
doerrorprocessing ;
他
続行する;
)
errorcodetype method2 (
エラーが発生しerrorcodetype ;
エラーが発生しmethod3 =コール;
もし(エラー)
エラーを返し;
他
続行する;
)
errorcodetype method3 (
エラーが発生しerrorcodetype ;
エラーが発生しないreadfile =コール;
もし(エラー)
エラーを返し;
他
続行する;
)
リコールで検索してjava runtime environmentの後方を通じて、任意のメソッドをコールスタックを見つけることに興味があるの取り扱い、特定の例外ではない。 アヒルことができ、任意のメソッド内で例外を投げて、それを許可する方法を遠くするコールスタックに乗ろうとします。 したがって、メソッドのみを気にしてエラーを心配する必要のエラーを検出する:
( method1
お試し(
コールmethod2 ;
た) catch (例外のe ) (
doerrorprocessing ;
)
)
method2例外例外(
コールmethod3 ;
)
method3例外例外(
コールするreadfile ;
)
しかし、 pseudocodeとして示すように、ずぶぬれの例外的な努力を必要とする団体は、いくつかの方法を仲介します。 チェックして任意の例外をスローすることができなければならないメソッド内での例外条項に指定されました。
すべての例外が投げられたため、プログラム内のオブジェクトは、グループ化または分類の例外は、当然の結果で、クラスの階層します。 の例は、グループの関連例外クラスで定義されているし、 javaプラットフォームjava.ioioexceptionとその子孫です。 ioexceptionが最も全般を表し、どのような種類のエラーが発生したときに発生し実行することができるのi / o その子孫を表すより具体的なエラーが発生します。 たとえば、ファイルを意味しfilenotfoundexceptionできませんでしたし、ディスク上に位置します。
特定のハンドラメソッドを書くことができ、非常に処理することができる特定の例外ではない。 filenotfoundexceptionクラスの子孫はありませんので、ハンドラを処理することができ、次の1つだけ例外の種類:
キャッチ( filenotfoundexceptionのe ) (
...
)
キャッチすることができ、例外法に基づいて、グループまたは全般のいずれかのタイプを指定することによって例外のスーパークラスの声明をキャッチします。 たとえば、に乗ろうとすべてのi / o例外を除いて、彼らの特定の種類に関わらず、例外ハンドラの引数を指定しioexception :
キャッチ( ioexceptionのe ) (
...
)
このハンドラを捕まえることができるすべてのi / o例外を除いて、 filenotfoundexceptionを含め、 eofexception 、としています。 詳細については見つけることができ、どのような照会が発生し、例外ハンドラの引数に渡されます。 たとえば、次のを印刷して使用してスタックトレース:
キャッチ( ioexceptionのe ) (
e.printstacktrace ( ) ; / /出力行くsystem.errます。
e.printstacktrace ( system.out ) ; / /トレースをstdoutに送信します。
)
を設定することができても、例外ハンドラを扱うすべての例外ハンドラのページ:
キャッチ(例外のe ) ( / / (も)全般の例外ハンドラ
...
)
例外クラスの近くには、一番上の階層throwableます。 したがって、このハンドラはキャッチに加えて他の多くの例外ハンドラは、それらの意図に乗ろうとしています。 例外処理をお勧めしたいお客様のすべての場合にこのようなプログラムには、たとえば、プリントアウトするとエラーメッセージがユーザーのために、それから終了します。
ほとんどの場合、しかし、例外ハンドラをしたいのように可能な限り特定します。 その理由は、まず最初にハンドラを決定しなければならないのは、どのような種類の例外が発生する前に回復することを決定する最良の戦略だ。 有効な場合、特定されません。引くが、エラーが発生する可能性ハンドラを収容する必要があります。 例外ハンドラ全般できるようにしてはあまりにも多くのコードを引くとされる誤差がありがちで例外処理していないと予想されるため、プログラマがハンドラの意図はなかったします。
としては、グループを作成することができ、例外処理の例外は、ファッション全般、または使用することができ、特定の種類の例外を区別するためには、正確な例外処理を例外とファッションします。
Online: 691 users browsing the articles directory
|
|