参照型の配列

みるくあいらんどっ! > ドキュメント > Java > じっくり学ぶ Java講座 [初心者向け・入門]


参照型の一次配列

参照型の配列は、基本的には基本型の配列と同様に記述していきます。

あらかじめ設定した 3個の点を表示するプログラムを製作することにします。仕様を以下に定めます。

  • 点の座標は(10, 15), (100, 50), (20, 30)とする。
  • すべての点の内容を表示する。

この仕様を満たすソースコードは以下の通り。

J301/J301.java

import java.awt.Point;

/**
 * 参照型の一次配列を使用します。
 */
public class J301 {
	
	/**
	 * メインメソッド。
	 * @param args 引数
	 */
	public static void main(String[] args) {
		// Point[]型インスタンスの生成と、参照型変数の宣言、紐付け
		Point[] points = new Point[3];
		
		// Point型インスタンスの生成
		points[0] = new Point(10, 15);
		points[1] = new Point(100, 50);
		points[2] = new Point(20, 30);
		
		for(int i = 0; i < points.length; i ++) {
			System.out.println((i + 1) + "番目は " + points[i]);
		}
	}
}

実行結果の例は以下の通り(実行環境によって出力結果が異なることがあります)。

1番目は java.awt.Point[x=10,y=15]
2番目は java.awt.Point[x=100,y=50]
3番目は java.awt.Point[x=20,y=30]

以下の点に注意して下さい。

  • Point[]型インスタンスが 1個、Point型インスタンスが 3個生成されている。
  • new Point[3]の記述によって、Point[]型インスタンスが生成されるが、Point型インスタンスまでが生成される訳ではない。Point[]型インスタンスの各要素(インスタンスフィールド)は、nullで初期化される。したがって、Point型インスタンスの生成前に使用しようとすると、例外NullPointerExceptionが発生する。
  • 復習になりますが、22行目には .toString()が省略されています。

イメージとしては以下のような感じです。String型インスタンスについては記述を省略しています。

参照型一次配列

配列の参照型の宣言と配列インスタンスの初期化

配列の参照型の宣言と配列インスタンスの生成・初期化を一括で行う場合、簡易的に記述できます。

ソースコードは以下の通り。

J302/J302.java

import java.awt.Point;

/**
 * 参照型の一次配列を使用します(初期化します)。
 */
public class J302 {
	
	/**
	 * メインメソッド。
	 * @param args 引数
	 */
	public static void main(String[] args) {
		// Point[]型インスタンスと Point型インスタンスの生成
		// 参照型変数の宣言、紐付け
		Point[] points = {
				new Point(10, 15),
				new Point(100, 50),
				new Point(20, 30),
		};
		
		for(int i = 0; i < points.length; i ++) {
			System.out.println((i + 1) + "番目は " + points[i]);
		}
	}
}

実行結果は以下の通り。

1番目は java.awt.Point[x=10,y=15]
2番目は java.awt.Point[x=100,y=50]
3番目は java.awt.Point[x=20,y=30]

これは「new Point[]が省略されている」とみなすこともできます。予約語newが使用されていない場合においても、配列インスタンスが生成されていることに変わりないことに注意してください。

イメージとしては以下のような感じです。String型インスタンスについては記述を省略しています。

配列の初期化

参照型の二次配列

以下の二次配列を表示するプログラムを記述します。

  1列 2列 3列
1行目 (10, 15) (100, 50) (20, 30)
2行目 (40, 20) (80, 10) (75, 45)

この仕様を満たすソースコードは以下の通り。

J303/J303.java

import java.awt.Point;

/**
 * 参照型の二次配列を使用します。
 */
public class J303 {
	
	/**
	 * メインメソッド。
	 * @param args 引数
	 */
	public static void main(String[] args) {
		// Point[][]型インスタンスと Point型[]インスタンス、Point型インスタンスの生成
		// 参照型変数の宣言、紐付け
		Point[][] points = {
				{
					new Point(10, 15),
					new Point(100, 50),
					new Point(20, 30),
				},
				{
					new Point(40, 20),
					new Point(80, 10),
					new Point(75, 45),
				},
		};
		
		for(int j = 0; j < points.length; j ++) {
			System.out.println((j + 1) + "行目");
			for(int i = 0; i < points[j].length; i ++) {
				System.out.println(" " + (i + 1) + "列目は " + points[j][i]);
			}
		}
	}
}

実行結果の例は以下の通り(実行環境によって出力結果が異なることがあります)。

1行目
 1列目は java.awt.Point[x=10,y=15]
 2列目は java.awt.Point[x=100,y=50]
 3列目は java.awt.Point[x=20,y=30]
2行目
 1列目は java.awt.Point[x=40,y=20]
 2列目は java.awt.Point[x=80,y=10]
 3列目は java.awt.Point[x=75,y=45]

予約語 newは 6回使用されていますが、実際はそれ以外にも、Point[][]型配列インスタンスが 1個、Point[]型配列インスタンスが 2個生成されていることに注意してください。

イメージとしては以下のような感じです。String型インスタンスについては記述を省略しています。

二次配列

多次元配列その他

多次元配列についても、基本的には、基本型の配列と同様の記述ができます。

繰り返しになりますが、初期値を指定しない場合の初期化の際には、一次の配列インスタンスの初期値としてnullが設定されることに留意してください。

最終更新: 2013/02/11 , 公開: 2013/02/11
▲top