9.5例外処理のルール


成功は、次の4つの目的を達成しなければならない例外処理
混乱最小限にするために図1に示すように、プログラム・コードを
、2を捕捉し、診断情報を保持する
適切な人員に通知3を
異常な活動を終了する適切な方法を使用して、4

まず、ない過剰使用の例外を行います

:例外の過度の使用は、主に2つの側面がある
一緒に、コードを扱うすべてのエラーを書き込むことがないのではなく、単に例外の代わりに、すべてのエラー処理を投げるために1、混乱や異常な一般的なエラーを。
2、代わりに例外処理の制御フローを使用します。
完全に既知のエラーのためのプログラムの堅牢性を増加させる、このエラーコードに対処するために準備する必要があり、一般的なエラーは、このエラーコードに対応するように調製されるべきであるため、プログラムの堅牢性を増加させます。唯一の外部のために、それはランタイムエラーと例外の予測不可能な使用までに決定することはできません。
そのようなバックギャモンのゲームのように、ハンドルユーザ入力は、2つの方法となっている作品の座標点:

//如果用户试图下棋的坐标点已有棋子
if(!gb.board[xpos-1][ypos-1].quales("+"))
{
    System.out.println("你输入的坐标点已有棋子了,请重新输入:");
    continue;
}

上記のアプローチは、直ちに声明を印刷するように指示し、次のサイクルが再び始まり、チェスのポーンポイントを再生するには、ユーザーの試みをチェックすることでした。このアプローチは、単純な、明確なロジックです。
次のように上記のメカニズムの場合:

//如果用户试图下棋的坐标点已有棋子,程序自行抛出异常
if(!gb.board[xpos-1][ypos-1].quales("+"))
{
    throw new Exception("你输入的坐标点已有棋子了");
}

上記のアプローチは、効果的なエラー処理のコードを提供しない、プレイチェス駒へのユーザの試みは点の座標を有するプログラム検出は、プロセスを提供し、単に例外をスローしません。この方法は単純であるが、動作効率が悪化するので、しかし、Javaランタイムの例外を受け取った後、あなたはまた、例外をキャッチするために、対応するcatchブロックを入力する必要があります。そして、ユーザーのチェスプログラムは、むしろ例外をスローするよりも、このエラーのために適切な治療を提供できるように、このミスは、完全に予測可能である繰り返します。
それは注意しなければならない:メカニズムの意図を例外処理は、例外処理コードと通常のビジネス・ロジック・コードの予想外の分離にあるので、ビジネスロジックの判断を扱う通常の例外を置き換えるために使用されていません。通常よりもさらに、例外メカニズム非効率的なプロセス制御効率なので、代わりに通常のプログラムフロー制御の例外処理を使用しないでください。
たとえば、以下のコード:

    //定义一个字符串数组
    String[] arr={"Hello","Java","Spring"};
    //使用异常处理来遍历arr数组的每个元素
    try
    {
        var i=0;
        while(true)
        {
        System.out.println(arr[i++]);
        }
    }
    catch(ArrayIndexOutOfBoundsException ae)
    {}

そのようなコードは、トラバース配列要素ARR上記機能が、そのようなアプローチの貧弱な可読性を達成することができるが、効率は高くありません。プログラムは完全に例外をキャッチするcatchブロックを使用し、この例外を作った「故意」は、ArrayIndexOutOfBoundsException例外プログラムを回避し、することができ、これは起こるべきではありません。プログラムはかなり良く、次の形式を変更しました:

String[] arr={"Hello","Java","Spring"};
for(var i=0;i<arr.length;i++)
{
    System.out.println(arr[i]);
}

注:例外は、唯一の通常のプロセス制御の代わりに、例外処理を使用しない、異常な状況に対処すべきです。処理及びエラーを取り除く、いくつかの完全に予測するために、プログラムは適切なエラーコードを処理するのではなく、一般的に異常と呼ばれる提供すべきです。

第二には、大きすぎるtryブロックを使用していません

コードのtryブロックが大きすぎるでは、あまりにも複雑なビジネスは、それは非常に異常な原因分析により難しく、その結果、増加した異常なtryブロックの可能性になります。
tryブロックが大きすぎるとtryブロックは異なる例外処理ロジックのためのさまざまな提供することができますcatchブロックの数が多い続いた後、それは避けられません。トライcatchブロックでブロックした後、それらの間の論理的な関係を分析するために必要な多くの続いたが、難易度のプログラミング増加しています。
正しいアプローチが発生することが複数のブロックにプログラムセクションの多数を試し、それぞれ、別々のtryブロックに入れ、その結果、捕捉およびハンドル例外です。

第三に、回避usingステートメントは、すべてをキャッチ

異常なキャプチャモジュールを参照するすべての記述をキャッチ、それはすべての可能な異常な手順が発生し処理することができます。例えば:

try 
{
    //可能引发Checked异常代码
}
catch (Throwable t)
{
    //进行异常处理代码
    t.printStackTrace();
}

プログラミングは、このモードの例外処理を使用することは避けてください場合は、このアプローチは、2つの欠点があります。
ポイントとの契約ならば、異常な状況の異なる点に対処することができなくなって、1、すべての例外を同じ方法で処理されますが、あなたはそれが実際価値があるだろう、catchブロックで制御分岐ステートメントを使用する必要があります。
図2に示すように、この方法は、プログラム内のエラーとすることができる、ランタイムプログラムの異常終了は、異常な全てのそのような「抑制」の捕獲をもたらし得ます。異常ないくつかの「クリティカル」の場合、この例外は、「静かに」無視されます。

第四には、キャッチした例外を無視しないでください

プロセスとエラーを修正-例外ので、有益な何かをしなければならないcatchブロックをキャッチ。全体catchブロックは空である、または印刷エラー情報が不適切です。
:異常な一般的な推奨事項は、適切な措置を採用
1、ハンドルの例外を。戻り値ではなく修復に適した所望の;;異常を、他の方法やデータを用いて計算し、その後異常の局所的発生を回避またはショートの上書き動作チェック例外を促すし続けること..... 、プログラムは、修理に試してみてください。
2、新しい例外を再スローします。昨夜現在の動作環境下で可能な限りのことを行う、その後、異常な翻訳するには、現在のレイヤーに詰め異常な異常は、最後の発信者に再スローします。
図3に示すように、適切な例外処理層です。現在の層が例外を処理する方法がはっきりしない場合には、例外をキャッチするcatchステートメントで、現在のレイヤーを使用していない、スロー直接スローされ、最後の発信者は、例外を処理する責任がありましょう。

おすすめ

転載: www.cnblogs.com/weststar/p/12636684.html