java初心者です。
*******************************************
Exception in thread "main" java.lang.NullPointerException
at Region2.<init>(Region2.java:7)
at Region2.main(Region2.java:11)
*******************************************
というエラーで困っています。
ソースは、
*******************************************
import java.io.*;
public class Region2 {
public Test[] t = new Test[10];
public Region2(){
t[0].x = 1;//ココ
System.out.println(t[0].x);
}
public static void main(String[]args){
Region2 reg = new Region2();//ココ
System.out.println(reg.t[0].x);
System.exit(0);
}
}
class Test{
public int x;
public Test (int x){//xをセット
this.x = x;
}
public void Show () {//xを表示
System.out.println(x);
}
}
****************************************
見ての通りのプログラムで、あまり意味のないものですが、オブジェクトの配列の動作をテストしています。でずが、「ココ」とコメントしたところでたたかれてしまいます。私は恥ずかしながら「え?何でダメなの?」という感じです。
何がいけないのか、もしくはどうすれば、
1
1
と表示されるか、どなたかアドバイスください。
No.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だよといった感じだったのですね。(こんなことを言っているからなかなかオブジェクト指向になれられないのですが・・)
オブジェクトを生成していないし、参照先も登録してなかったわけですよね。また何かありましたらよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java配列の問題を教えてくださ...
-
cloneメソッドについて (java)
-
Java CSVファイルをカンマごと...
-
Javaでのカンマで配列を分ける方法
-
【C#】ハッシュテーブル(連想...
-
配列について
-
【Ajax通信&Java】配列の受け取...
-
BOOL値を逆にしたい
-
Java配列でNullPointerExceptio...
-
java キーボード入力された値の...
-
JAVA EOFの検出 (条件文で「...
-
System.err. printlnとSystem.o...
-
iterateで受け取った値を処理に...
-
EXCEL VBA で、0から?1から?
-
コマンドライン引数の例外処理...
-
SwingでJtableのヘッダ行が表示...
-
Eclipseのコンソールを常に表示...
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
-
変数を動的に作るには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列で、値の入っている要素数...
-
【C#】ハッシュテーブル(連想...
-
[Ljava.lang.Stringってなんですか
-
javamailで複数人にメールを送...
-
この警告はどうすれば?
-
main(String[] args) の args...
-
javaで大容量テキストファイル...
-
Javaで文字と数字が混ざったも...
-
ページング
-
C言語でunsigned char配列を連...
-
Javaで文字を漢字であるか否か...
-
配列の中に複数存在する数がい...
-
C#で動的配列Listの中身をListB...
-
『args[]』とは?
-
同じ配列またはクラスを、2回...
-
java StringとString[]の違い
-
配列をセッションに割り当てた後で
-
【Ajax通信&Java】配列の受け取...
-
セッションを使ったint型の値の...
-
forループの評価(条件)式につ...
おすすめ情報