- - PR -
NullPointerExceptionについて
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-06-09 23:35
JSP実行時に、java.lang.NullPointerExceptionのエラーが出てしまいます。
どういうときに、java.lang.NullPointerExceptionエラーが出るのかイマイチよく分かりません。お解かりになる方ご教授願います。 |
|
投稿日時: 2004-06-09 23:55
未記入さん、こんにちは。
JSPエラーの件は別スレッドで質問されているようですから、 ここでは一般的な事に絞って書くことにします。 java.lang.NullPointerExceptionはエラーというよりは、 例外と呼んだ方が適切ですが、これが出る原因は オブジェクトの参照先が nullのままアクセスすることです。 文法上の未初期化などの幾つかはコンパイル時にエラーになり ますが、制御シーケンスの都合でオブジェクトが設定されてい ないときには発生します。 私がやったことのある誤りを幾つか紹介すると、 1. コンストラクタでインスタンス属性を初期化するようになって いるが、そこを通過する前に呼び出した privateなメソッドで その属性をアクセスしていた。 (そのクラス自身の中からの呼び出しなら直ぐに気付きますが、 スーパクラスから自動的に呼び出された場合などは、気がつくまで 時間が掛かることがあります。) 2. nullが設定される可能性のある参照を、if文を使用せずに 無条件でアクセスしてしまった。 3. 属性を初期化する前にコンストラクタ内から他のオブジェクトに リスナ登録してしまったりしたとき、思いのほか直ぐにコールバック されて nullをアクセスしてしまう。 参考になるかどうか、分かりませんが。 |
|
投稿日時: 2004-06-10 09:57
java.lang.NullPointerExceptionが発生するのは、
nullが代入されている変数に対してメソッド呼び出しをした場合です。 Kissingerさんの挙げられている小難しい例ではなく、初心者にありがちな java.lang.NullPointerExceptionが発生する場面はを挙げます。 1.インスタンスフィールドまたは、クラスフィールドを初期化せずにメソッドを呼び出した。 2.配列の各要素を初期化せずにメソッドを呼び出した。 3.あるメソッドの戻り値がnullだったが、確認せずにメソッドを呼び出した。 4.null値を受け付けないメソッドの引数にnullを渡した。 5.(コンパイラがエラーを出すので仕方なく)ローカル変数にnullを 代入して、メソッドを呼び出した。 CやC++をやったことのある人だと、変数や配列を宣言した時点ではまだ、 インスタンスが作成されていないことに躓くことが多いと思います。 また、配列の場合、配列のインスタンス化と各配列の要素の代入という 2段階の初期化をしなければならないことにも注意です。 あとは、HashMap#get()のようにnullを返すことのあるメソッドを使っていないか、 またそれはどんなときにnullを返すのかに注意してください。 |
|
投稿日時: 2004-06-10 10:57
ほとんどはWataさんが例示していただいていますが、
JSP実行時ということであれば request.getAttributeやsession.getAttribute でnullを返すことでnullPointerExceptionが発生するのが 一番ありがちかと思います。 |
1
