- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java.lang.NullPointerException)
Java初心者が困っている!NullPointerExceptionの解決方法とは?
このQ&Aのポイント
- Java初心者がオブジェクトの配列の動作をテストしているプログラムで、NullPointerExceptionが発生してしまい困っています。
- 該当のプログラムでNullPointerExceptionが発生する原因として、オブジェクトの配列を宣言しただけで初期化していないことが考えられます。
- NullPointerExceptionを解決するためには、オブジェクトの配列を初期化する必要があります。具体的には、配列の要素ごとにオブジェクトを生成し、初期化することで解決できます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
今アルコール入ってるんで、 回答の妥当性はそちらでチェックしてくださいね。 これは public Test[] t = new Test[10]; のところで、「配列tができた」と思っていたところが できていなかったのが原因です。 Javaのオブジェクトというのは、宣言しただけでは使えなくて、 newしなくてはならないというのはおわかりですね? つまり、Abcというクラスがあった場合、 Abc a; だけでは使えなくて、 Abc a = new Abc(); のようにしなくてはなりません。 配列を宣言したというのは、 「配列の変数を宣言しただけ」なのです。 「Javaの配列はテーブルタップのようなもの」 というたとえがあります。 テーブルタップには、実際に使う電化製品をつながないといけません。 public Test[] t = new Test[10]; では、「配列の変数が宣言された」だけです。 具体的には、 t[0] = new Test(...); t[1] = new Test(...); ... t[9] = new Test(...); のようにします。こうしないと、配列の要素の各オブジェクトは存在しません。 (for(int i = 0; i < 10; i++){ t[i] = new Test(...); } でもいい。) t[0].x = 1; のところでは、存在しないオブジェクトのフィールドに値を代入しています。 だからエラーになります。
お礼
とてもわかりやすい御説明、ありがとうございます。 なるほど!ともやもやしたものが一気になくなりました。 C言語でいう、ポインタは宣言したけど、肝心のポインタの中身はNULLだよといった感じだったのですね。(こんなことを言っているからなかなかオブジェクト指向になれられないのですが・・) オブジェクトを生成していないし、参照先も登録してなかったわけですよね。また何かありましたらよろしくお願いします。