例外処理(例外処理)

Javaの、例外処理(例外)
例外は、プログラムの実行中に発生する望ましくない何かがある、適切に治療しなければ、これらのものは、奇妙な結果またはプログラムの終了につながることができます。例外ハンドラ異常がコード内で発生したときに異常に対処するものです。:だから、ここで約3事の話

(1)例外(例外)何である
1.1例外とJavaで
1.2チェックし、未チェック例外が
異なる1.3エラーとチェックされない例外
の例外を処理する方法2.(例外を処理する方法)
2.1のtry-catch-をついに
2. 2.例外スロー
のカスタム例外クラスを作成する方法3.
のカスタム例外クラスを作成する方法3.1を
例外スローカスタム3.2をスローする方法
の例外(例外)は何1
例外は、数のプログラムの実行中に発生しました、適切に治療しなければ、これらの事が起こるしたくない奇妙な結果またはプログラムの終了につながることができます。異常がコード内で発生した場合に例外が異常に対処するものハンドラ。JavaとJavaScriptは、例外を処理している/キャッチしてみてください。

例外とJava 1.1で
のJavaの例外もオブジェクトです。
最初のマップへ


出典:http://voyager.deanza.edu/~hso/cis35a/lecture/java13/intro/hier.html
その父親はThrowableのである(面接審査、黒板にノック)。また、エラーと呼ばれる兄を持っています。

異なるエラーと例外:
。エラーは、通常のアプリケーションでキャッチすべきではないという重大な問題を示すThrowableのサブクラスである

クラスException時およびそのサブクラスは、通常のアプリケーションでキャッチされる可能性のある状態を示すThrowableの形式の1つです。

異常1.2がチェックされ、未チェック
、コンパイラがハンドルであることが要求されたときにチェック例外があります。(プラス何ハンドラがない)コンパイル時に例外が発生したとしても知られているハンドラが存在しない場合はチェック例外を検出する時間をコンパイルします。クラスは例外ではなく、のRuntimeExceptionの子供たちの子供であれば、それらがコードプラスハンドラを記述することを要求されたとき、チェックされています。IDEた場合は、コードを書くときに、このような例外を処理するように求められます。
例えば:CloneNotSupportedExceptionは、IOException、のSQLException、
InterruptedExceptionある、FileNotFoundExceptionを
、それがプログラムの実行中に発生するため、チェックされない例外は、実行時例外として知られています。私たちは、このような例外を処理しないハンドラを追加することはできませんこのような例外に対処するためのハンドラを追加することができます。もしクラスは、それがチェックされない例外であること、のRuntimeExceptionの子孫です。
例えば:は、IllegalMonitorStateException、
ConcurrentModificationExceptionが、NullPointerExceptionが、
IndexOutOfBoundException、NumberFormatExceptionが
異なる1.3エラーとチェックされない例外は
、実行時に発生したが、エラーを処理するために推奨されていませんが。ほとんどの場合であってもキャッチは修復することはできません増します。RuntimeExceptionがハンドルを行くことができます。

2.例外を処理する方法(例外を処理する方法)
、それはスロー例外を宣言されたときに宣言するための方法があります。例外はチェック例外である場合は、それを処理する必要がある場合、このメソッドが呼び出されます。
チェック例外は、(別のメソッドがスローされた例外と呼ばれる)のどこかに爆弾方法Aを投げる、または他の場所で爆弾を受けた場合は、2つのソリューションがあり、爆弾のようなものです:

自分のそれを破ります( try-catch-最後に)。この場合、方法は爆弾(異常)A心配しないメソッドを呼び出します
加工誰方法A呼び出す人、捨てるために続けて(方法Aの宣言時にプラススローされます。)
最初のオプション、方法A方法B、メソッドを呼び出すときに爆弾が取り壊された、方法B場合何も心配しないでください。
第二の方法ならば、方法Bメソッドを使用すると、同時に知りたいコールは爆弾を受けたので、それは取り壊され、2つのソリューションを持っている、または継続スローされます。

キャッチ最終的にしようとして爆弾を解体する方法2.1
:のtry-catch
共通配列境界例外を。ハンドルは、コンパイル時を必要としないので、それはとても一般的な初心者のランタイム例外で、例外オフになっています。(ハンドルにする必要がありますが、処理したい場合も考えられるわけではありません。)

java.io.をインポート*;
publicクラスExceptionTest1 {
   公共の静的な無効メイン(文字列の引数[]){
      試み{
         int型A [] =新しい新しいINT [2]。
         System.out.println([3]); // へのクロスボーダーアクセスのアレイ
      キャッチ(ArrayIndexOutOfBoundsExceptionがE){}
         のSystem.out.println(E); //が行うには意味のあるものではないが、プログラムの半分で死亡防止が。
      }
      のSystem.out.println( "正常に実行");
   }
}

トライは異なるエラー処理を分離するために、いくつかのキャッチが続くことがあり:

{しようと
   何かをする//
}キャッチ(Exception1 E){
    //ハンドルタイプ例外初
    のSystem.out.println(「Exception1が起こった」)
}キャッチ( F Exception2){
    //最初のタイプのハンドル例外
    のSystem.out.println(「Exception2が起こった」)
}

例外が発生した後、それはタイプException1わけではない場合Exception1タイプは、第1のハンドルになる場合キャッチを見下ろし、Exception2タイプならば、第二のcatchブロックのハンドルになります。
Exception1とException2は親子関係であれば、私の父が最初に検出された場合、あなたはcatchブロックの息子に取得することはありませんので、息子はまず、検出されなければなりません。

finallyブロック:
finallyブロックが発生するいずれの場合のブロックです。コード内の漁獲量は、例外が発生していない場合は実行されますが、最終的にはとにかく内部のコードを実行されることはありません。(内部を除いてみたりはSystem.exit(1)エンドJVMでキャッチします。)通常、ファイルを閉じるために使用されています。

      {試し
         //何かをして
      キャッチ}(例外e){
          //ハンドル例外
      }最後に{
         //コードが実行されています。
      }
   }
}

また、トライついに法的です。

どのように投げポットが例外をスローし続ける2.2
には、キーワードスロー

// m1は例外スロー
のボイドM1が設定してFileNotFoundExceptionをスローを(){
    //おそらくファイルがZezheng見つからない場合に検討する必要はありません、いくつかのファイルを読みたいです。(スローされポット)
}
// M2はM1と呼ばれ、同等の例外m1の手から受け取った、私たちは投げ出され続け、対処しません。
M2はFileNotFoundExceptionをボイドをスロー(){
    M1(); //あなたは見つけることができないファイルを使用したい場合、私は検討するつもりだ方法のM1、M1のcase文を使用します。
    //平方メートルまだZezheng見つからないファイルを検討する必要はありません。
}

包括的な例を見る:
以下の例外コードが適切に起因するハンドルと、コンパイラエラーに受信されない:

インポートjava.io.Fileの、
インポートjava.io.FileReader;
//エラーコンパイルされます
パブリッククラスReadFileTestを{
   静的な無効メインパブリック(文字列引数[]){
      はgetFile();
   }
   パブリック静的ボイドはgetFile(){
          ファイルファイル=新しい新ファイル( "file.txtを");
       FileReaderのFRは=新しい新規FileReader(ファイル); //エラー:未報告FileNotFoundException例外、キャッチまたはスローされるように宣言されなければならない
   }
}

FileReaderのコンストラクタが例外スローため

パブリックFileReaderの(文字列のファイル名)がFileNotFoundExceptionをスロー
1
はgetFile FileReaderのメソッド呼び出しは、例外を処理しなければならないときに。

以下は、上記の二つの方法の例外の処理の一例である

。インポートjava.io.Fileの
インポートjava.io.FileReader;
インポートjava.io.FileNotFoundException;
publicクラスReadFileTest {
   公共の静的な無効メイン(文字列引数[]){
           getFile1( );
           System.out.println(「=============」);
        試み{
           // getFile2例外が再び投げので、利用可能な治療の主な方法は、そのようにします。
           getFile2();
        }キャッチ(FileNotFoundExceptionをE){
           System.out.printlnは( "取扱メインの例外");
        }
      
   }
   // getFile1が自分の処理を選択し、何の問題は、そのメソッドを呼び出していない
   公共の静的な無効getFile1(){
        試みを{
                  ファイルファイル=新しい新ファイル( "file.txtを");
               FileReaderのFR =新しい新規FileReader(ファイル);
           }キャッチ(にFileNotFoundException E){
               するSystem.out.println( "取扱における例外getfile1");
       }
   }
   //選択getFile2無治療、継続は投げません
   静的な無効getFile2公開は()にFileNotFoundException {スロー
          ファイルファイル=新しい新しいファイル( "file.txtなどを");
       FileReaderのFR = FileReaderの(ファイル)新新;
   }
}

実行結果:

取扱getfile1の例外
========== ===
取扱メインの例外

一般的に、ここでの主な方法の例外のすべてが解決されている必要があります。場合は、mainメソッドが投げることも無責任です。

java.io.Fileのインポート、
インポートjava.io.FileReader;
インポートjava.io.FileNotFoundException;
publicクラスReadFileTest {
   公共の静的な無効メイン(文字列引数[])は、{にFileNotFoundExceptionスロー
           getFile1を();
           のSystem.out.println(「= ============「);
        getFile2();
      
   }
   パブリック静的ボイドgetFile1(){
        試す{
                  ファイルファイル=新しいファイル( "file.txtは");
               FileReaderのFR =新規FileReader(ファイル);
           {}キャッチ(にFileNotFoundException電子)
               のSystem.out.println( "例外getfile1で処理")。
       }
   }
   パブリック静的ボイドgetFile2は()にFileNotFoundException {スロー
          ファイルファイル=新しいファイル( "file.txtなどを");
       FileReaderのFR =新規FileReader(ファイル);
   }
}

这样做是可以的...在没有文件的情况下(触发例外)运行结果:

getfile1で処理例外
=============
スレッドの例外"メイン" java.io. FileNotFoundException:file.txtは(そのようなファイルまたはディレクトリ)
    java.io.FileInputStream.open0で(ネイティブメソッド)
    java.io.FileInputStream.open AT(FileInputStream.java:195)
    java.io.FileInputStream AT。の<init>(FileInputStream.java:138)
    java.io.FileReader AT。の<init>(FileReader.java:72)
    AT ReadFileTest.getFile2(ReadFileTest.java:21)
    ReadFileTest.main AT(ReadFileTest.java:8)

(3)例外のカスタム適用する方法
3.1の例外のカスタムカテゴリを作成する方法は
、例外を拡張し、その子は死んで

1クラスNew1Exceptionは例外を拡張します{} //例外チェック作成
IOExcpetion {} //はIO例外に関連付けられた作成延びNewException 2クラス
のRuntimeException {} //未確認の例外を作成延び3.クラスNewExceptionを

例に(非常に単純であるが):

インポートするJava * .IO ;.
クラス例外を拡張MyException
{
    MyExceptionパブリック(文字列S)
    {
        ;:スーパー(+ S「MyExceptionが起こる」)
        //は他の何かを行うことができます
    }
}

カスタム例外に(スロー)スローする方法3.2を
投げると投げる
スローがメソッドまたはコードでありますブロック内で、例外が爆弾のためにスローされます。
メソッドが宣言された場合、このメソッドは例外をスローすることを示し、スロー。

ただMyExceptionに例を書く:

輸入java.io. *;
publicクラスメイン
{
    公共の静的な無効メイン(文字列の引数[])
    {
        試み{
            throwTest();
        }キャッチ(MyException E){
            System.out.printlnは( " 「キャッチ何か);
            System.out.printlnは(e.getMessage());
        }
        // throwTest2は独自の例外でハンドルを投げて、通常の方法です。
        throwTest2();
        //テストTest3はと他のブロック、
        同じブロックに書き込まれている場合は//、throwTest()が例外をスローし、throwTest3()が実行されていない、
        トライ{
            throwTest3();
        }キャッチ(MyException E){
            System.out.println(「キャッチ何か」);
            System.out.printlnは(e.getMessageは());
        }
    }
    //彼らはメソッド宣言でそれらを捨て、その後、処理されません。その方法の呼び出しを伝えるために行くことは扱う必要が
    パブリックstatic throwTestボイド(){MyExceptionは、スロー
        、スロー、新たな新MyException(「何か」)
    }
    //自身のハンドル、通常の方法に
    公共の静的な無効throwTest2(){
        試み{
            スロー新しい新MyException(「somethingElse」);
        }キャッチ( MyException E){
            System.out.println( "キャッチsomethingElse");
            System.out.printlnは(e.getMessageは());
        }
    }
    //自分自身を処理し、中にキャッチをスローするように続けています。
    静的な無効公共throwTest3(){MyExceptionはスロー
        試し{
            スロー新しい新MyException( "somethingElse2");
        }キャッチ(MyException E){
           //無責任なキャッチが、法的です。
           Eスロー;
        }
    }
}  

出力:

キャッチ何か
A MyExceptionが起こる:何か
キャッチsomethingElse
A MyExceptionが起こる:somethingElseは
何かキャッチ
somethingElse2を:たまたまA MyExceptionを

おすすめ

転載: www.cnblogs.com/zhuyeshen/p/10968244.html