類別名稱 陣列名稱[]; //宣告陣列名稱
陣列名稱 = new 類別名稱[物件數量]; //產生陣列實體
129
(2)由於每一個陣列元素代表每一個物件的參考,所以 我們可以透過迴圈逐次產生各個物件實體。如果您想要 呼叫的建構函式不同,則可以將迴圈展開,手動逐個產 生各個物件實體,如下範例語法:
7.9 物件陣列
陣列名稱[0]=new 類別名稱(引數串列);
陣列名稱[1]=new 類別名稱(引數串列);
陣列名稱[2]=new 類別名稱(引數串列);
: : :
【範例1】宣告一個包含10個字串物件的陣列 strArr,初始內容為空。
【說明】strArr包含10個陣列元素,每一個陣列 元素都是字串物件的參考,在迴圈中,我們則為 這些物件參考產生物件實體。
7.9 物件陣列
String strArr[] = new String[10];
for(int i=0;i<strArr.length;i++) {
strArr[i]=new String(); //為每一個陣列元素產生物件實體
}
131
【範例2】宣告一個包含7個字串物件的陣列 strArr,初始內容為各星期的英文單字。
【說明】由於要藉由建構函式建置不同的字串內 容,故將迴圈展開手動來設定引數。
7.9 物件陣列
String strArr[] = new String[7];
strArr[0]=new String("Sunday"); //為陣列元素strArr[0]產生物件實體 strArr[1]=new String("Monday"); //為陣列元素strArr[1]產生物件實體 strArr[2]=new String("Tuesday"); //為陣列元素strArr[2]產生物件實體 strArr[3]=new String("Wendesday"); //為陣列元素strArr[3]產生物件實體 strArr[4]=new String("Thursday"); //為陣列元素strArr[4]產生物件實體 strArr[5]=new String("Friday"); //為陣列元素strArr[5]產生物件實體 strArr[6]=new String("Saturday"); //為陣列元素strArr[6]產生物件實體
【觀念範例7-14】:建立一個物件陣列,並透過引數設定,觀察建構 函式的執行狀況。
範例7-14:ch7_14.java(隨書光碟 myJava\ch07\ch7_14.java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/* 檔名:ch7_14.java 功能:物件陣列與建構函式 */
package myJava.ch07;
import java.lang.*;
public class ch7_14 //主類別 {
public static void main(String args[]) {
CMyClass X[] = new CMyClass[3];
System.out.println("---");
for(int i=0;i<X.length;i++) X[i] = new CMyClass();
CMyClass Y[] = new CMyClass[3];
System.out.println("---");
for(int i=0;i<Y.length;i++) Y[i] = new CMyClass(i+10);
}
7.9 物件陣列
133
執行結果:
7.9 物件陣列
21 22 23 24 25 26 27 28 29 30 31 32 33 34
class CMyClass {
public int VarA;
private int VarB;
public CMyClass() //無參數的建構函式 {
System.out.println("無參數的建構函式執行中");
}
public CMyClass(int i) {
System.out.println("有參數的建構函式執行中,參數為" + i);
} }
---無參數的建構函式執行中 無參數的建構函式執行中 無參數的建構函式執行中
---有參數的建構函式執行中,參數為10 有參數的建構函式執行中,參數為11 有參數的建構函式執行中,參數為12
範例說明:
利用第11、16行的列印,我們可以得知,物件的建構函 式會等到實際產生物件實體時才進行,而不會在產生物 件陣列實體時進行,因為物件陣列內的元素只是物件的 參考而已。
傳遞物件陣列
我們時常會有需要將物件陣列傳遞給某個函式,
進行更進一步的應用。
傳遞物件陣列和傳遞一般陣列的語法差不多,只 不過是將原始資料型態改為類別名稱而已,請見 下列範例。
7.9 物件陣列
135
【觀念範例7-15】:觀察物件陣列中,每個元素的參 考值。藉以了解物件實體在記憶體的配置情形。
範例7-15:ch7_15.java(隨書光碟 myJava\ch07\ch7_15.java)
7.9 物件陣列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/* 檔名:ch7_15.java 功能:傳遞物件陣列與物件配置情形 */
package myJava.ch07;
import java.lang.*;
public class ch7_15 //主類別 {
public static void main(String args[]) {
CMyClass X[] = new CMyClass[5];
for(int i=0;i<X.length;i++) X[i] = new CMyClass();
COtherClass Obj = new COtherClass();
Obj.show(X);
} }
執行結果:
18 19 20 21 22 23 24 25 26 27 28 29 30 31
class COtherClass {
public void show(CMyClass X[]) {
for(int i=0;i<X.length;i++)
System.out.println("物件X[" + i + "]實體的位址在" + X[i]);
} }
class CMyClass {
public int VarA;
private int VarB;
}
7.9 物件陣列
物件X[0]實體的位址在myJava.ch07.CMyClass@3238c403
物件X[1]實體的位址在myJava.ch07.CMyClass@2cccbab7
物件X[2]實體的位址在myJava.ch07.CMyClass@34f65b5b
物件X[3]實體的位址在myJava.ch07.CMyClass@19e7ce87
物件X[4]實體的位址在myJava.ch07.CMyClass@41a80e5a
137