• 沒有找到結果。

類別名稱 陣列名稱[]; //宣告陣列名稱

陣列名稱 = 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

範例說明:

(1)第14行Obj物件呼叫show函式時,將物件陣列當作引 數傳入函式中。

(2)在show函式中,我們列印X[i]的內容,會列印出每 個物件的參考位址,您可以發現,雖然陣列元素

X[0]~X[5]會位於連續的記憶體位址,但實際的物件實 體並不一定會位於連續的記憶體位址。參考圖示如下:

7.9 物件陣列

回顧定義類別的語法,我們可以發現,在宣告成員 變數或成員函式時,可以指定其[修飾字]。

其中,對於成員變數而言,我們可以將修飾字指定為 static, final, transient, volatile等等,或其組合,

不過final與volatile不能合用。

對於成員函式而言,我們可以將修飾字指定為static, final, abstract, native, synchronized等等,或其組 合,但abstract則不能與其他修飾字合用。

這些修飾字對於成員變數或成員函式將產生不同的 效果。在本節中,我們要介紹的只有static修飾字

使用static修飾字定義的成員變數稱為類別變數(class variable)

使用static修飾字定義的成員函式稱為類別方法(class

method)。因此,我們可以將語法修改如下:

相關文件