NullPointerException
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 型オブジェクトを宣言し、オブジェクトを作成していないため、ヒープ内のアドレス参照がありません、オブジェクトを作成する必要がある場合は、メソッドをドロップするオブジェクトを使用することを確認してください。
関連
-
ImportError: Missing required dependencies ['numpy'] 最初のインポートpandas問題に対する解決策。
-
リソースの読み込みに失敗しました:サーバーは403(Forbidden)のステータスで応答しました。
-
Python Basics: io.UnsupportedOperation: 読み取れません。
-
[C++ エラー処理] transform の呼び出しに一致する関数がありません。
-
ImportError: virtualenv を使用して仮想環境を作成する際に、urllib3 という名前のモジュールがないエラーが発生します。
-
scp エラー: 通常のファイルではありません
-
C++で'atoi'がこのスコープで宣言されていない問題を解決するにはどうしたらいいですか?
-
C# データベース操作エラー この接続に関連する開いているデータリーダーがすでにあり、閉じる必要があります。
-
Volley NetworkDispatcher.run。処理されない例外 java.lang.NullPointerException
-
ValueErrorの解決策:解凍する値が足りない(期待値2、取得値1)。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefinedGitチュートリアル: ! [却下] master -> master (最初に取得) 解決策
-
Java仮想マシンランチャーです。Java の例外が発生しました
-
shell あいまい出力リダイレクト
-
python reports an error: 'list' object has no attribute 'shape'
-
ternsflow AttributeError: __enter__
-
ローカルプロジェクトをgitlabにアップロードする
-
Python3_TypeError: 'list' オブジェクトは呼び出し可能ではありません。
-
[違反】スクロールブロックの「mousewheel」イベントに非パッシブなイベントリスナーを追加。
-
mscorlib.dll で "TargetInvocationException" 型の例外が発生するが、ユーザーコードで処理されない
-
sql server の int から datetime への変換