1. ホーム

NullPointerException

2022-02-19 16:30:15
<パス

1. NullPointerException例外の原因は何ですか?



ヌルポインターは、ヌル参照である。javaのNULLポインタ例外は、参照自体はNULLであるが、あるメソッドが呼び出され、その時点でNULLポインタ例外が発生することである。



ヌルポインター例外の報告にはいくつかの理由があります。



1 String変数が初期化されていません。



2 インターフェース型のオブジェクトが具象クラスで初期化されていない、例.



リストアップして、エラーを報告する



List it = new ArrayList(); ならば、エラーは報告されません。



3 オブジェクトの値がnullの場合、nullの判定ができない。以下のコードの行の前につけてみてはどうでしょう。



if(rb!=null && rb!="")



に変更します。



if(rb==null);



if(rb!==null&&rb!="") or if("").equals(rb)))



2. ヌルポインタの解決策?



エラーが発生した行に着目し、ヌルポインタ例外の2大原因によって具体的なエラーを診断します。また、NULLポインタを避けるために、判定を行う際には設定値の前に"null"またはNULL値を置くとよいでしょう。



一般的なヌルポインタの例外について簡単に分析します。



(1) Nullポインタのエラー



Javaの8つの基本的なデータ型は、変数の値は、そのデフォルト値を持つことができる、その値の通常の割り当てに参加し、Java仮想マシンが正しくを介してコンパイルすることはできませんので、基本的なJavaデータ型の使用は、一般的にヌルポインタ例外が発生することはありません。実際には、ほとんどのNULLポインタの例外は、主にオブジェクトの操作に関連しています。



以下に、ヌルポインター例外が発生する可能性のある状況と、それに対応する解決策を示します。



コードセグメント 1.



  out.println(request.getParameter("username")));



  分析 スニペット1の関数は非常にシンプルで、ユーザー入力の値 "username"を出力しています。



説明します。上記のステートメントでは、構文エラーは見つからず、ほとんどの場合、問題は発生しないようです。しかし、ユーザーがフォームフィールドの "username" を指定せずにデータを入力したり、何らかの方法でフォームを直接迂回した場合、この request.getParameter("username") の値が null (空の NullPointerException" では無いことに注意) であれば、 out オブジェクトの println メソッドは null オブジェクトに対して直接操作できないため、コードスニペット1がある JSP ページでは "Java.lang.XXX が投げられることとなり、その結果、out オブジェクトの println メソッドは、out オブジェクトに対して直接操作できないため、out オブジェクトの getParameter の値が null であれば、その値は null となります。また、オブジェクトが空でも、toString()、equal(Object obj)などのJava.lang.ObjectやObjectオブジェクト自体のメソッドが呼び出されることがあるようです。



コード・スニペット 2.



  String userName = request.getParameter("username");



  If (userName.equals("root"))。



  {...}



  解析する。コードセグメント2の機能は、ユーザーによって提供されたユーザー名を検出し、それがユーザー名 "root"のユーザーである場合にいくつかの特別なアクションを実行することです。



説明 スニペット2では、ユーザーがフォームフィールド "username"の値を提供しない場合、文字列オブジェクト userName は null 値であり、null オブジェクトを他のオブジェクトと直接比較することはできず、またスニペット2がある JSP ページは null ポインタエラーを投げるでしょう。



ヒント:あるメソッドの戻り値を定数と比較したい場合は、定数を前に置くと、nullオブジェクトに対してequalsメソッドを呼び出す必要がなくなります。例えば



If ("ルート".equals(ユーザー名))



  {...}



userNameオブジェクトがNULLオブジェクトを返しても、ここではNULLポインタ例外は発生せず、通常通り動作します。



コードセグメント 3.



  String userName = session.getAttribute("session.username").toString();



分析 コードセグメント3の機能は、セッションからsession.usernameの値を取り出して、その値を文字列オブジェクトuserNameに代入することです。



説明 一般に、ユーザーがすでにセッションを持っている場合は問題ありませんが、この時点でアプリケーションサーバーが再起動され、ユーザーが再びログインしていない場合、(またはユーザーがブラウザーを閉じても元のページを開いている場合)、セッション値は無効になり、セッション内のsession.username値は空となります。nullオブジェクトに対して直接toString()操作を行うと、nullポインタ例外が発生します。



コード・スニペット 4.



public static void main(String args[]){ (Public static void main(String args[]){) <未定義



Person p=null。



p.setName("Zhang San")を設定します。



System.out.println(p.getName())。



}



解析する。Personオブジェクトを宣言し、オブジェクト内のName名を出力します。



説明します。今回は、p のヌルポインタ例外があります。この Person 型オブジェクトを宣言し、オブジェクトを作成していないため、ヒープ内のアドレス参照がありません、オブジェクトを作成する必要がある場合は、メソッドをドロップするオブジェクトを使用することを確認してください。