どもです。
javaを学習していると思うのが、
phpって配列周りの機能がすこぶる恵まれていたなぁということ。
しかし嘆いていても仕方ないので、phpの連想配列に近い機能を持つっぽい
オブジェクト型配列
を使いこなせるようになりたいところです。
オブジェクト型配列の超基本
オブジェクト型配列という名前の通り、オブジェクト生成を必要とする配列です。
オブジェクトを生成するということは、それ用のクラスを必要とします。
int number;
double quantity;
}
このクラスから普通にオブジェクトを生成するとき、
TestArray test = new TestArray();
で、numberとquantityを含んだオブジェクトが作成できます。
このクラスからオブジェクト型配列を生成する場合、
TestArray[] test = new TestArray[2];
で、numberとquantityを含んだオブジェクト型配列が作成できます。
配列の宣言と要素の確保が、
int[] test = new int[2];
で、できることを踏まえると、型名の場所がクラス名になっただけなのがわかります。
オブジェクトの生成と、配列の宣言を組み合わせただけの書き方です。
ここまでだとメンバが生まれていない
これで良し、とforでも回して中身を入れようとすれば、
java.lang.NullPointerException
エラーさんにこんにちはしてしまいます。
というのも、
普通のオブジェクト生成の場合、
TestArray test = new TestArray();
の時点で、
int number と double quantity の宣言がされた状態です。
TestArray();でコンストラクタ(初期化のための関数)を呼び出して、
int number と double quantity に値が入力されているためです。
クラスの方でコンストラクタが設定されていなくても、
自動的に変数に0やnullを代入するコンストラクタが発生するので、
普通にオブジェクトを生成すると必ずコンストラクタが実行されるわけです。
しかし、オブジェクト配列の場合、
この時点ではコンストラクタが実行されていない。
つまりnumberとquantityの宣言は行われていないようです。
そこで、こういった一手順を必要とします。
test[i] = new TestArray ();
}
配列の項目1つずつに於いて、
コンストラクタTestArray()を宣言してオブジェクトを作成、
項目に代入する必要があるようです。
少し面倒ですが、この手間を踏めば、
phpの連想配列に近い、複数の型を含んだ配列を実現することができるのでマスター必須ですね。