【Java入門(2)オブジェクト指向:基本編 #8】配列

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

この オブジェクト指向:基本編は、今回が最終回です。

Java入門2 オブジェクト指向:基本編 #8
クラス型(参照型)の配列の使い方

を 見ていきましょう。

彩香
オブジェクト指向:基本編も最終回ですね。
だいぶ、オブジェクト指向の考えが分かってきました。

今回の配列も、バッチリ勉強します。

剛留
クラス型の配列ですね。
学んできた事の組み合わせ、とても楽しみです。

今回も、よろしくお願いします。

【1】 配列イメージ

ここまで、クラスをインスタンス化して 利用する例として
変数に代入して利用する事を 見てきました。

まずは、インスタンス化したした結果を
変数に代入する時の 内部イメージを思い出しましょう。

SalesEmployee se = new SalesEmployee();

例えば、営業部員を表すクラス
SalesEmployee を インスタンス化します。

仮に、メモリ上の 100番地からはじまる位置に
インスタンスが作成されたとします。

そして、この SalesEmployee型の変数を
宣言して、つまり箱を用意して…

その中に、インスタンスの参照値 この場合には
100番地 を代入します。

こうなると、変数 se は、クラス SalesEmployee を
インスタンス化した実体を指し示すことになりましたね。

彩香
参照型だから、参照値が代入される。
そして、利用する時には、その指し示す先を利用する。

覚えています。

そして、このインスタンス化した結果は
配列の要素に代入して 使うこともできます。

例えば クラス SalesEmployee を 3つ インスタンス化して
配列で処理したい場合を考えましょう。

まずは、クラス SalesEmployee を 3つ
順番に インスタンス化します。

それぞれ、100番地、200番地、300番地に
インスタンス化されたとしましょう。

そして、ここで この SalesEmployee型の
要素数 3 の配列 se を宣言して…

つまり 3つ の連なる箱を用意して…

その中に、インスタンスの参照値、この場合には
100番地、200番地、300番地を 順に代入します。

se[0] に 100 番地を代入し…

se[1] に 200 番地を代入し…

se[2] に 300 番地を代入します。

このようにすると、配列の各要素が
インスタンスの参照値を 持っていることになるので…

その実体を指し示して、使えることとなるのです。

このイメージを 押さえておきましょう。

剛留
変数を使っていたところで
配列要素が使えるという事ですね。

イメージ、スッキリ 分かりました。

【2】 クラス型の配列宣言

次に、クラス型の配列宣言ですが…

これは、宣言するデータ型が
クラス型(参照型)であるという事以外は…

通常の配列の宣言の方法と同じです。

配列の宣言は

配列の宣言
データ型[] 配列名 = new データ型[要素数];

…ですので、このデータ型の部分が
クラス名 になると考えましょう。

例えば、SalesEmployee型 の
配列要素 3 の配列を宣言する場合…

SalesEmployee型 の 配列要素 3 の配列
SalesEmployee[] se = new SalesEmployee[3];

という書き方になります。

基本を 再確認しておきまよう…。

【3】 配列要素の設定

配列要素に、インスタンス化した結果(アドレス値)を
設定する方法を 例で見ておきましょう。

// 配列の宣言
SalesEmployee[] se = new SalesEmployee[3];

// クラスをインスタンス化した結果を 配列の要素に代入
se[0] = new SalesEmployee(“速水剛留”, 1000000);
se[1] = new SalesEmployee(“河合彩香”);
se[2] = new SalesEmployee(“鈴木一郎”, 850000);

まず、前のコーナーでお話した配列の宣言をして
配列の領域を確保した後に…。

インデックスで指定した配列要素に
SalesEmployeeをインスタンス化した結果を代入しています。

インスタンス化して 変数に代入していた部分を
配列要素にした形になっていますね。

そして、この配列の宣言と配列要素の設定(代入)は
一緒に行えます。初期化です。

このように記述します。

SalesEmployee[] se = {
    new SalesEmployee(“速水剛留”, 1000000),
    new SalesEmployee(“河合彩香”),
    new SalesEmployee(“鈴木一郎”, 850000)
};
彩香
何だか 少し複雑に見えてしまいますが…。

初期化の中に、インスタンス化の記述があるので
最初は 少し複雑に感じるかも知れませんね…

イメージと照らし合わせて
ゆっくり見てみましょう…。

配列宣言と要素 の初期化ですが
クラス型ですので、クラスをインスタンス化します。

この例では、3つのインスタンスを作成します。

そして、初期化する配列は 3つの要素 を持つことが
わかりますので、配列の領域が確保されて。

0番目、1番目、2番目と順にインスタンスの
開始アドレス(参照値)で初期化する事になります。

例えば、インスタンス化された先頭アドレスが
それぞれ 100番地、200番地、300番地だった場合…

配列要素には、100番地、200番地、300番地が格納されます。

配列要素の初期化の方法と、イメージを
併せて押さえておくと良いと思います。

剛留
イメージと重ね合わせると
段々と 分かってきた感じがします…。

【4】 メンバアクセス

配列要素 が指し示すインスタンスの
メンバアクセスの方法ですが…

インスタンスのメンバアクセス
配列要素に対して 『 . 』(ドット演算子)を使う

これは
配列要素に対して
『 . 』(ドット演算子)を使います。

変数と同様に考えて大丈夫です。

(フィールドの参照・代入)
配列名[インデックス].フィールド名

(メソッド呼び出し)
配列名[インデックス].メソッド名(実引数,…)

という形になります。

例を見ていきましょう。

SalesEmployee[] se = {
    new SalesEmployee(“速水剛留”, 1000000),
    new SalesEmployee(“河合彩香”),
    new SalesEmployee(“鈴木一郎”, 850000)
};

// 1番目のインスタンスのフィールドに値を設定
se[1].salesAmt = 500000;

// 0番目のインスタンスのメソッド呼び出し
se[0].displayInfo();

SalesEmployee型配列 se を宣言して
インスタンス化した3つの参照値で
要素を初期化しています。

1番目のインスタンスのフィールドに
値を設定する場合には、このように記述します。

se[1].salesAmt = 500000;

0番目のインスタンスのメソッド displayInfo() を
呼び出す場合には、このように記述します。

se[0].displayInfo();

配列要素に、ドット演算子を続けることは
最初に見ると違和感があるかも知れませんが…

意味合いを理解して、使っていきましょう。

【まとめ】

【1】 配列イメージ
✅ クラスをインスタンス化した結果は
  そのクラス型の配列の要素に代入して
  扱うことができる。
【2】 クラス型の配列宣言
データ型[] 配列名
= new データ型[要素数];

✅ データ型の部分が クラス名 となる。

【3】 配列要素の設定
✅ 配列要素へのインスタンス化の結果の代入

  配列名[インデックス] = new クラス名(実引数);

✅ 配列要素へのインスタンス化の結果の代入

  配列名[インデックス] = new クラス名(実引数);

✅ クラス型の配列の初期化

  クラス名[] 配列名 = {
   new クラス名(引数),
     :
   new クラス名(引数)
  };

【4】 メンバアクセス
✅ フィールドの参照・代入
  配列名[インデックス].フィールド名

✅ メソッド呼び出し
  配列名[インデックス].メソッド名(実引数,…)