私たちは、基本的なタイプは、クラスは、インタフェースは、列挙型を表現したデータを操作しているご紹介する前に、プロセス操作は、物事の多くは間違って行く持っていることがあり、間違った理由は、多くのことがあり、メモリなどの制御不能ないくつかの内部要因、ディスクがいっぱいである十分ではない、そのようなネットワーク接続の問題など、いくつかの制御不能な外部要因は、そのようなインスタンスメソッドたinvoke直接参照初期化されていない変数として複数の手続き型プログラミングエラーであってもよいです。
これらの非正常状態は異常とみなされ、より多くのコンテンツとして、我々は報告書に二つに分け、統一統一治療にJavaでJavaの例外メカニズムを使用して、このセクションでは、メインセクションの下で、最初のコンセプト異常、および異常なクラス自体を記述導入ハンドル例外。
レッツは、異常検知何を学ぶためにいくつかの例を通ってきます。
初期異常
NullPointerExceptionが(ヌル・ポインタ例外)
コードセクションで見てみましょう:
パブリッククラスExceptionTest { パブリック静的無効メイン(文字列[] args){ 文字列S = NULL; s.indexOf( "A"); System.out.println( "終了"); } }
変数の初期化されていない方法がのindexOf例、画面出力の動作と呼ばれます。
スレッドの例外「メイン」java.lang.NullPointerExceptionが ExceptionTest.mainで(ExceptionTest.java:5)
出力は、私たちに語っている:主な機能をExceptionTestクラス、コード行5は、ヌルポインタ例外(java.lang.NullPointerExceptionが)がありました。
しかし、何を具体的にその後起こったのか?実行s.indexOfは(「」)は、Javaシステムは、sの値がnullのを発見された場合、続行する方法はありません、そして、あなたはメカニズムを例外処理を可能にする、最初の例外オブジェクトを作成し、ここではクラスのNullPointerExceptionオブジェクトで、その後、サンプルコードでは、例外を処理することができます誰が見て見て、例外を処理できないコードは、Javaがあるデフォルト処理メカニズム、画面に印刷例外スタック情報によって有効になっており、プログラムを終了しています。
関数呼び出しの原則を導入したとき、私たちは、発信者の最上層を追跡するために、異常箇所から含めて例外スタック情報をスタックを導入し、また、行番号が含まれて、我々は、スタック情報が異常最も重要な情報のを分析することであると言うことができます。
最後の行のSystem.out.println(「終了」)のサンプルコードが実行されることはありませんので、Javaのデフォルトの例外処理メカニズムは、強制されていません発生プログラム、コードポイント例外を終了することです。
NumberFormatExceptionが(異常なデジタルフォーマット)
私たちは、たとえば、次のコードを見てみましょう:
パブリッククラスExceptionTest { パブリック静的無効メイン(文字列[] args){ IF(args.length <1){ するSystem.out.println( "请输入数字")。 リターン; } INT NUM = Integer.parseInt(引数[0])。 System.out.println(NUM)。 } }
コマンドラインは、コードは、パラメータの数、整数Integer.parseIntその変換パラメータを必要とし、整数を出力することを示すパラメータ引数。パラメータがユーザによって入力され、私たちは、何を入力するようにユーザーを強制する方法がありません、あなたが数など、123、123画面出力、しかしを紛失した場合、ユーザー入力が数値でない場合など、ABCなど、画面出力:
スレッドの例外"メイン" java.lang.NumberFormatException:入力文字列の場合: "ABC" java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)で java.lang.Integer.parseIntで(Integer.java:492) でjava.lang.Integer.parseInt(Integer.java:527) ExceptionTest.mainで(ExceptionTest.java:7)
異常NumberFormatExceptionが登場。この異常は、それを生成する方法ですか?例外スタック情報よると、我々は、関連するコードを見て:
これは、コードの65本のNumberFormatExceptionがクラスラインに近いです。
64静的NumberFormatExceptionがforInputString(文字列S){ 65リターン新しいNumberFormatExceptionが( "入力文字列の場合:\" "+ S + "\"")。 66}
これは、コードIntegerクラスの492行に近いです。
490桁=は、Character.digit(s.charAt(I ++)、基数)。 491 IF(桁<0){ 492スローNumberFormatException.forInputString(S) 493} 494 IF(結果<multmin){ 495スローNumberFormatException.forInputString(S) 496}
これら二つが一列にまとめ、主なコードは次のとおりです。
新しいNumberFormatExceptionがスローを(...)
新しいNumberFormatExceptionが(...)私たちは、それがクラスのオブジェクトを作成することで、理解しやすいですが、このクラスは例外クラスです。それはどういう意味投げますか?つまり、Javaの例外処理メカニズムをトリガーする、例外がスローされ、です。ヌルポインタ例外前に、我々は独自の実装を投げるコードは、Java仮想マシンによって考慮することができるスロー表示されません。
リターンキーワードコントラストキーワード投げる、通常の出口への復帰を表し、スロー代表異常終了、戻り復帰位置が決定され、すなわち、1つの発呼者、及びその上にコードの行が後に実行されることがしばしば不明である投げます動的に例外処理メカニズムによって決まります。
例外処理メカニズムは、主な機能まで、現在の機能「キャプチャ」例外ではなく、レイヤーを表示するには、現在の関数から、誰を見て探し始めるだろう、何の主な機能は、デフォルトのメカニズム、例外スタックの出力情報を表示して終了するが存在しない場合は、これは私たちが画面出力に見たものです。
例外スタック情報画面出力の場合、プログラマが理解しやすいですが、普通のユーザーが理解できない、行うには方法がわからない、我々は、ユーザーに彼が番号を入力する必要があることをユーザーに伝えるより友好のメッセージを与える必要がこれを行うために、我々は我々自身の「キャプチャ」の例外を必要とします。
「キャプチャ」使用のtry / catchキーワードを指し、我々は、例外を捕捉した後、サンプルコードを見て:
{クラスExceptionTest公共 のpublic static無効メイン(文字列[] args){ IF(args.length <1){ するSystem.out.println( "番号を入力してください"); リターン; } 試み{ int型NUM = Integer.parseInt(引数[0]); のSystem.out.println(NUM); }キャッチ(NumberFormatExceptionがE){ System.err.println( "パラメータ" +引数[0] +) "番号を入力し、有効な数値ではありません"; } } }
我々は、トライバック中括弧{}は含む、コードが例外をスローし、キャッチステートメントと例外処理コードを含むブラケットを捕捉することができ、リアキャッチブラケット異常情報を含んでもよく取り込まれ、処理のtry /キャッチ例外を使用します変数名と例外の種類、これはNumberFormatExceptionが電子であり、中括弧{}内のコードを処理しているより多くの情報を得ることができる異常は、よりわかりやすいメッセージが出力されます。
キャッチ例外の後、プログラムが予期せず終了しませんが、try文で外れ値の後に他のコードが実行されません、とキャッチ内のステートメントの実行が完了した後、プログラムはかっこキャッチ外のコードを実行していきます。
このように、我々は異常予備的な理解を持って上にある、異常リターンへの出口のメカニズムのタイプを基準とし、また、例外がtry / catchステートメントおよび処理によって捕獲することができますthrow文によってプログラムによってトリガすることができるシステムによってトリガすることができ、キャッチされない場合は、それが終了し、出力例外スタック情報にプログラムの原因となります。異常のさまざまな種類があり、そして、私たちは知っています。
Exceptionクラス
Throwableを
NumberFormatExceptionが例外クラスのNullPointerExceptionとされ、例外クラスは、4つのすべてのpublicコンストラクタを持っている共通の親クラスのThrowableを、持っています:
- 公共のThrowable()
- 公共のThrowable(String型のメッセージ)
- 公共のThrowable(String型のメッセージ、Throwableの原因)
- 公共のThrowable(Throwableの原因)
そこに二つの主要なパラメータ、メッセージ、異常を示すメッセージであり、他方が原因で、他の異常の例外をトリガ示します。異常異常の鎖、上底によってトリガ異常異常を形成し、底部は、原因が異常で表します。
Throwableのは、公共の原因のための方法が提供されます。
ThrowableをinitCause(Throwableの原因)
パラメータなしでいくつかのThrowableのサブクラスのコンストラクタの原因は、それはこの方法で設定することができ、この方法は、唯一の最も一度に呼び出すことができます。
すべてのコンストラクタは、重要な関数呼び出しがあります。
fillInStackTrace();
それは私たちがキー例外スタックを見ることができる情報を、保存された例外スタックとなります。
Throwableの例外情報を取得するために使用されるいくつかの一般的な方法があります。
空のprintStackTrace()
標準出力ストリームに例外スタックエラー情報を出力し、2つのオーバーロードされた方法があります。
空のprintStackTrace(PrintStreamを複数可) のボイドのprintStackTrace(PrintWriterのS)
指定されたストリームにスタック情報を印刷し、私たちのフォローアップ記事でのPrintStreamとのPrintWriterを説明します。
文字列のgetMessage() のThrowable getCause()
設定を取得し、異常なメッセージを引き起こします
StackTraceElement [] getStackTraceメソッド()
各層の例外スタックの情報を取得する、のStackTraceElement情報ファイル名、クラス名、関数名、行番号、等を含む各。
例外クラスのシステム
ルートへのThrowable、異常な部分の様々なタイプを表す例外クラスの多くに定義されたJava APIは、次のカテゴリを示します。
Throwableのは、それは2つのサブクラスとエラー例外があり、すべての例外の基底クラスです。
Javaシステム自体によって使用されるシステムエラーやリソースの枯渇を、エラーようなそのサブクラスメモリオーバーフローエラー(のOutOfMemoryError)に記載されている図形と、スタックオーバーフローエラーとして、アプリケーションがスローされるべきであり、処理、仮想マシンのエラー(VirtualMacheError) (StackOverflowErrorが)。
IOExceptionが(入出力I / O例外)、のSQLException:例外アプリケーションエラーが3つのサブクラスを多くのサブクラスがあることを示し、アプリケーションが相続またはサブクラスでカスタム例外例外を作成することができ、直接描画リスト(SQLデータベースの異常)、のRuntimeException(実行時例外)。
RuntimeException(実行時例外)は、その名前は少し誤解を招くおそれがあり、かなり特殊です他の例外が実行時に生成されるので、それが表す実際の意味は、チェックされない例外(ではない未確認の例外)で、比較的、例外と例外の他のサブクラスを話しますそれ自体は例外(異常な科目)、エラーをチェックされ、そのサブクラスはチェックされない例外です。
それ以外の場合はそこにコンパイルエラーとなり、未チェックの例外のため、この要件を持っていない、オンまたはオフ、チェック例外のためにJavaの例外の両方を処理する方法の違いの嘘は、Javaプログラマが必須となります。次のセクションではさらに説明します。
RuntimeExceptionを多くのサブカテゴリー、次の表に、一般的なもののいくつかがあります。
異常な | 説明 |
NullPointerExceptionが発生します | nullポインタ例外 |
IllegalStateExceptionが | 違法状態 |
ClassCastExceptionが発生 | 不正なキャスト |
IllegalArgumentException | パラメータエラー |
NumberFormatExceptionが | デジタル形式エラー |
IndexOutOfBoundsException | 範囲外のインデックス |
ArrayIndexOutOfBoundsExceptionが | 境界の配列インデックスアウト |
StringIndexOutOfBoundsExceptionを | 境界の文字列のインデックスアウト |
非常に多くの異なる例外クラスとだけいくつかの工法を定義した後、実際にはプロパティとメソッドこれ以上のベースクラスよりもThrowableの数は、クラスのほとんどは、親クラスを継承し、これらのコンストラクタは、単に親クラスのコンストラクタを呼び出し、なし追加の操作。
なぜクラスのように多くの異なる定義はありますか?主に異なる名前のために、例外クラス名自体は、それがスローされたか、例外をキャッチし、適切な名前は、コードの可読性と保守性を助ける使用されているかどうか、例外キー情報を表します。
カスタム例外
それがある場合は、カスタム例外はチェックされない例外は、親クラスがのRuntimeExceptionまたはそのサブカテゴリーの一つである場合には、異常のJavaに定義されたAPIに加えて、我々はまた、通常、相続例外またはそのサブカテゴリーの1つを介して、独自の例外クラスを定義することができますです例外例外または他のサブクラスは、カスタム例外は、例外をチェックされます。
私たちは、例外を拡張することにより、以下のコードを例外を定義します。
パブリッククラスAppExceptionは、例外{延び 公共AppExceptionを(){ スーパー()。 } 公共AppException(文字列メッセージ、 Throwableの原因){ スーパー(メッセージ、原因)。 } 公共AppException(文字メッセージ){ スーパー(メッセージ)。 } 公共AppException(Throwableの原因){ スーパー(原因)。 } }
そして、他の多くの例外クラスは、私たちは例外、コンストラクタの定義を継承し、追加のプロパティとコードを定義し、親クラスのコンストラクタを呼び出すことはありません。
概要
このセクションでは、我々は異常の2つの例は、基本的な導入を行う必要があり、ルートクラスのシステムとしてそれにのtry / catchとスローキーワードとその意味、また、導入のThrowable例外を説明します。
次のセクションでは、私たちはさらに異常を探検してみましょう。