getMessage()の戻り値がnullのときに一度Viewプロジェクトのログを見つけ、それが問題でコードを書くことである、と後で問題の原因が発見されたが、nullポインタ戻り値は、ヌル例外であるが、それは、ログに出力だけヌルを感じました私たちはより良い方法を見つけようと、優しい十分なログを表示します。
理由
読み取りAPIの発見のgetMessage()メソッドは、クラスのThrowableを提供した後、
getMessage
公共の 文字列 のgetMessage()このThrowableオブジェクトの詳細メッセージ文字列を返します。
戻り値:
これの詳細メッセージ文字列
Throwable
(であってもよいインスタンスnull
)。
現在のインスタンスでスロー詳細戻るTrowable(nullの場合もある):それは意味何かを翻訳しました
APIは、記述から学ぶことができ、我々はのgetMessage()を取得nullの場合のブロガーが頻繁に会った、驚くべきnullでない他の異常な状況があるかどうかを、具体的、nullポインタ例外があるにもnullではないだろうあまりにもよく、ブロガーは他の記事は、他の異常な状況があるにもnullを返した読みください。
だから、私たちは間違って出力が何であるかを知っているようには良い方法があり、答えはイエス、2つのより良い方法後に発見されたいくつかの世話です。
- 例外のprintStackTrace()メソッドの使用
- 例外のtoString()メソッドの使用
違い
ヌル・ポインタ例外の間の差は、比較が発生した場合
printStackTrace
場合ヌルポインタ例外、出力将来的には、コードの量を掛け、クラスコール別のクラスが存在するであろう、コード例外タイプと例外の行数、例外は、与えられる各列の出力に報告されるであろうコンテンツの長いリストの複雑な関係の意志の出力を呼び出すとき。
//呼び出したときに、他のクラスありません
java.lang.NullPointerExceptionが
com.test.HelloWorld.mainで(HelloWorld.java:12)//他のクラスやメソッドの呼び出し時に
java.lang.NullPointerExceptionが
com.test.HelloWorld.test(HelloWorld.java:11)AT
com.test.SecondTest.main AT(SecondTest.java:6)
JDK源の見直しがNullPointerExceptionが見つかった後、それ自体がのtoString()関数を実装していないが、関数は、のtoStringの継承Throwableを使用することによって値detailMessageを取る()関数は、(ヌル・ポインタ例外detailMessage Throwableクラスはヌルであり、したがって現在、そうでない場合はdetailMessageの空の戻り例外クラス名が、そうであってもnullポインタ例外がjava.lang.NullPointerExceptionが返されます場合は、ダイレクトコールのgetMessage()メソッドは、)はnullを返します
/ ** *このスロー可能オブジェクトの短い説明を返します。 *結果は、連結である * <UL> * <LI> { @linkplain このオブジェクトのクラスのクラス#のgetName()名} * <LI> ":"(コロンとスペース) * <LI >このオブジェクトの{呼び出しの結果@linkの#getLocalizedMessageを} *メソッド * </ UL> * {場合@code getLocalizedMessage}戻り{ @codeのヌル}は、その後だけ *クラス名が返されます。 * * @return このThrowableの文字列表現。 = 。はgetClass()のgetName()。 文字列メッセージ = getLocalizedMessage()。 リターン(メッセージ!= nullの)?(S + ":" +のメッセージ):S。 } / ** *このスロー可能オブジェクトの、ローカライズされた記述を作成します。 *サブクラスを生成するためにこのメソッドをオーバーライドすることができる *ロケール固有のメッセージを。このオーバーライドしないサブクラスのため *の方法を、デフォルトの実装では、同じ結果を返す * { @code のgetMessageを()}。 * * @return このスロー可能オブジェクトのローカライズされた説明。 * @sinceの JDK1.1 * / パブリックストリングgetLocalizedMessage(){ 返す(のgetMessage)を、 } / ** *このThrowableオブジェクトの詳細メッセージ文字列を返します。 * * @return この{の詳細メッセージ文字列@code のThrowable}インスタンス ({とすることができる* @codeのNULL})。 * / パブリック文字列のgetMessage(){ 戻りdetailMessageと、 }
結論
例外は、唯一の異常リターンの種類を知る必要があるのtoString()メソッドを、あなたはの例外使用してエラーの詳細を知る必要があるのprintStackTrace()メソッドを。
Caishuxueqianは、エラーで説明したように、あなたが指摘感謝します。