【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

javaの勉強をしています。
名簿のような情報を操作したいのですが、

以下のようなクラスを作りました。

class Rec {
public String name; //名前
public String tel; //電話番号

Rec() {

}

}


そして、

Rec r = new Rec[5];
のようにして、この中に情報を5人分、入れようとしているのですが、

r[0].name = "AAAAA";
r[0].tel = "123456789";

を実行するとNullPointerExceptionで以上終了してしまいます。

よろしくお願いいたします。

A 回答 (2件)

始めに、念のため、


 Rec r = new Rex[5];
ではなくて、
 Rec[] r = new Rec[5];
または
 Rec r[] = new Rec[5];
ではないでしょうか。

コンパイルできているようなので、この辺は大丈夫でしょう。
●さて、ご質問の件ですが、

 Rec[] r = new Rec[5];

では、配列の準備ができているだけです。
中身のオブジェクトはないので、いきなり
r[0].name = "AAAA";
という作業はできません。

●オブジェクトが用意されていない・・・、
オブジェクトを指すポインタがありませんよ、ということで、
 「java.lang.NullPointerException」
というエラーメッセージで、Javaクンが訴えている訳です。

配列内に実際にRecオブジェクトを生成してあげてください。

r[0] = new Rec();

という1行を入れると、
r[0].name = "AAAA";
r[0].tel = "123456789";

が実行できます。

●もちろん、このままではr[1], r[2], r[3], r[4]はまだオブジェクトは用意されていないので使えません。

なので、以下のようにすると正常に配列【r】を扱うことができます。

Rec[] r = new Rec[5];
for(int i=0; i<5; i++){
r[i] = new Rec();//Recオブジェクト生成
}

この後、配列r をいろいろ操作する。

★補足
余裕ができたら、Recクラスのnameやtelへの代入は、直接
 r[0].name = "AAAA";
とするのではなくて、
 r[0].setName("AAAA");
のような形で値を代入できるように工夫するといいですよ。
    • good
    • 0
この回答へのお礼

返答ありがとうございました。
基礎がわかっていないことがはっきりわかりました。
もっと勉強します!

お礼日時:2004/02/17 17:34

Javaの参照型の場合、配列を宣言しても、オブジェクトは生成されません。


生成されるのは、オブジェクトへの参照を代入できる変数だけです。

配列でない変数にたとえると、
AClass a;
と宣言しているだけで、
AClass a = new AClass();
とはなっていない、というようなものです。

「Javaの参照型配列はテーブルタップのようなものだ」
と言った人がいます。
参照を代入するところだけ作られて、中身はまだです。

これに対して、プリミティブ型の配列は、
中身の変数も生成されます。
たとえば
int [] = new int[10];
とした場合、int型の変数10個ができています。
このへんがややこしいところです。
    • good
    • 0
この回答へのお礼

返答ありがとうございました。
配列は、やや不得意になりそうですが、
しっかり理解したいと思います。

お礼日時:2004/02/17 17:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報