キーワード辞典
物凄く乱暴なJava for全商1級+

登録日 14/09/10   更新日 16/10/14



物凄く乱暴なJavaに関する用語(オブジェクト的なこと)

詳しくは公式マニュアルをお読みください。
Javaって、こんな風にも書ける、とか、こうとも言う、とか、色々有るので、 以下は雰囲気だけのざっくりとした説明です。
作成中です。ミス有ったら後免。


クラスの配列


クラスの配列のインスタンス化
例えば、
クラス名 インスタンスの名[] = new クラス名[要素の数];
のような場合は、指定した要素の数だけのクラスの配列がインスタンスの名で実体化するが、 各々の要素のインスタンスには、別途、
インスタンスの名[添字] = new クラス名(引数);
の様な処理が必要となる。


[備考]
クラスの配列のインスタンス化において、 配列と、配列の要素と、newが2度必要になるのは、以下の理由からなる。
Javaにはポインタという概念は表面上は無いが、実際に無い訳では無い。 クラスや配列をインスタンス化するnewは、 メモリ上の何処かに確保したインスタンスの先頭アドレスを取得する。 クラスの配列のインスタンス化の場合は、 最初のnewで、その配列の各要素のインスタンスの先頭アドレスを記憶する領域(ポインタの配列)を確保し、 その先頭アドレス(ポインタの配列のポインタ)を取得する。 その後、 各要素でnewすることにより、メモリ上の何処かに確保した各要素のインスタンスの先頭アドレスが取得される。
【例】
Menuというクラスがあらかじめ定義してある。
Menu wagashi[] = new Menu[10];
wagashi[0] = new Menu();
  wagashi
 -+----+-
  |    | ←Menuクラスの配列のインスタンスwagashiの先頭アドレスを記憶する為のメモリ領域(1行目)
 -+----+-
   ↓
  wagashi[0]                                   wagashi[9]
 -+----+----+----+----+----+----+----+----+----+----+-
  |    |NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL| ←Menuクラスのインスタンスの配列、wagashiの
 -+----+----+----+----+----+----+----+----+----+----+- 各要素(Menuクラスのインスタンス wagashi[添字])
    ↓                                                   の先頭アドレスを記憶する為のメモリ領域
    ↓                         (1行目)
   wagashi[0]のメンバのメモリ領域へ(2行目)



とある和菓子屋の比較見積もり(?)プログラム。その2。配列版。
値の受け渡しを確認する為のプログラムなので、値引きなどの付随処理は省略。
Menuクラスは、前回のものと同じ。
//Menu.java (3)		2016.10.13	by Ryn

public class Menu {

	private String name;
	private int tanka;

	public Menu(String name, int tanka) {				// コンストラクタ
		this.name = name;
		this.tanka = tanka;
	}

	private float calcPayment(int suryo) {
		return tanka * suryo * (float)1.08;
	}

	public void dispData(int suryo) {
		System.out.print(String.format("%-4s @%,5d円 %4d個",name, tanka, suryo));
		System.out.println(String.format(" %,8d円(税込)", (int)calcPayment(suryo)));
	}
}

和菓子を10個考えるのは面倒なので、とりあえず2個。
//Sweets.java (3b)		2016.10.13	by Ryn

public class Sweets {
	
	public static void main(String[] args) {

		Menu wagashi[] = new Menu[2];
		wagashi[0] = new Menu("饅頭", 350);
		wagashi[1] = new Menu("羊羹", 500);

		try{
			if(args.length == 1){
				int suryo = Integer.parseInt(args[0]);

				for(int i = 0; i < wagashi.length; i++)
						wagashi[i].dispData(suryo);
			}
			else
				System.out.println("引数エラー!");
		}
		catch(NumberFormatException e2){
			System.out.println("数字じゃない!");
		}
	}
}


配列の要素をインスタンス化する場合は、 配列をインスタンス化したクラスのサブクラスを使用する事も可能である。




[ 黒板消しとチョーク受けの画像 ]