
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で質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java final 1 2022/06/10 22:49
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java Java 配列<選挙> 4 2023/07/31 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で動的配列Listの中身をListB...
-
C# ジェネリックメソッドでCSV...
-
多次元配列のソートがうまくい...
-
strutsで2次元配列をやりとりす...
-
sqlparamaterでIN句を使いたい。
-
[Ljava.lang.Stringってなんですか
-
ArrayListからBean配列に値をセ...
-
この警告はどうすれば?
-
Javaで文字を漢字であるか否か...
-
動的配列確保
-
CSVファイルの、列だけ取得したい
-
javamailで複数人にメールを送...
-
配列インデックス範囲外エラー?
-
java StringとString[]の違い
-
javaについて
-
Javaで文字と数字が混ざったも...
-
配列で、値の入っている要素数...
-
【C#】ハッシュテーブル(連想...
-
配列について
-
配列をセッションに割り当てた後で
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaで文字と数字が混ざったも...
-
C#で動的配列Listの中身をListB...
-
この警告はどうすれば?
-
[Ljava.lang.Stringってなんですか
-
javaで大容量テキストファイル...
-
ArrayListからBean配列に値をセ...
-
C言語でunsigned char配列を連...
-
main(String[] args) の args...
-
配列の中に複数存在する数がい...
-
javamailで複数人にメールを送...
-
【C#】ハッシュテーブル(連想...
-
同じ配列またはクラスを、2回...
-
Javaで文字を漢字であるか否か...
-
セッションを使ったint型の値の...
-
hit&blow
-
sqlparamaterでIN句を使いたい。
-
n番目に大きな値を探索する
-
配列で、値の入っている要素数...
-
データベースから取得したデー...
-
JavaのBase64デコードで正しく...
おすすめ情報