- PR -

NullPointerExceptionについて

1
投稿者投稿内容
牙狼
会議室デビュー日: 2004/06/09
投稿数: 16
投稿日時: 2004-06-09 23:35
JSP実行時に、java.lang.NullPointerExceptionのエラーが出てしまいます。
どういうときに、java.lang.NullPointerExceptionエラーが出るのかイマイチよく分かりません。お解かりになる方ご教授願います。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-06-09 23:55
未記入さん、こんにちは。

JSPエラーの件は別スレッドで質問されているようですから、
ここでは一般的な事に絞って書くことにします。

java.lang.NullPointerExceptionはエラーというよりは、
例外と呼んだ方が適切ですが、これが出る原因は
オブジェクトの参照先が nullのままアクセスすることです。

文法上の未初期化などの幾つかはコンパイル時にエラーになり
ますが、制御シーケンスの都合でオブジェクトが設定されてい
ないときには発生します。

私がやったことのある誤りを幾つか紹介すると、

1. コンストラクタでインスタンス属性を初期化するようになって
  いるが、そこを通過する前に呼び出した privateなメソッドで
  その属性をアクセスしていた。
 (そのクラス自身の中からの呼び出しなら直ぐに気付きますが、
  スーパクラスから自動的に呼び出された場合などは、気がつくまで
  時間が掛かることがあります。)

2. nullが設定される可能性のある参照を、if文を使用せずに
  無条件でアクセスしてしまった。

3. 属性を初期化する前にコンストラクタ内から他のオブジェクトに
  リスナ登録してしまったりしたとき、思いのほか直ぐにコールバック
  されて nullをアクセスしてしまう。

参考になるかどうか、分かりませんが。
  
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 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を返すのかに注意してください。
未記入
会議室デビュー日: 2003/09/24
投稿数: 18
投稿日時: 2004-06-10 10:57
ほとんどはWataさんが例示していただいていますが、 
JSP実行時ということであれば
request.getAttributeやsession.getAttribute
でnullを返すことでnullPointerExceptionが発生するのが
一番ありがちかと思います。
1

スキルアップ/キャリアアップ(JOB@IT)