【本節目标】
通過閱讀本節内容,你将了解到調用數組元素時記憶體層面的變化,對數組初始化有更深的了解,并學會通過foreach快速周遊數組元素。
數組的引用傳遞
通過數組的基本定義可以發現,在數組使用的過程之中依然需要關鍵字new進行記憶體空間的開辟,同理,那麼這裡面也一定存在有記憶體的關系比對。
範例:定義一個簡單代碼
public class ArrayDemo {
public static void main(String args[]) {
//使用數組的靜态初始化
int data [] = new int [3] ;
data [0] = 10 ; //為數組設定内容
data [1] = 20 ; //為數組設定内容
data [2] = 30 ; //為數組設定内容
for(int x = 0 ; x < data.length ;x ++){
System.out.println(data[x]) ;
}
}
}
以上面的程式為例下面要進行一次記憶體的簡單分析。

圖一 數組記憶體分析結果一
但是數組本身畢竟是屬于引用資料類型,那麼既然是引用資料類型,就一定會發生引用傳遞。引用傳遞應該還是按照傳統的方式那樣:一個堆記憶體可以被多個棧記憶體所指向。
範例:觀察數組引用
public class ArrayDemo {
public static void main(String args[]) {
int data [] = new int [] {10,20,30} ; //靜态初始化
int temp [] = data ; //引用傳遞
temp [0] = 99 ;
for(int x = 0 ; x < data.length ;x ++){
System.out.println(data[x]) ;
}
}
}
圖二 執行結果一
下面通過此程式進行記憶體的分析。
圖三 記憶體分析結果二
由于數組屬于引用類型,是以一定要為其開辟堆記憶體空間後才可以使用,如果現在使用了未開辟堆記憶體空間的數組,會出現“NullPointerException”異常。
public class ArrayDemo {
public static void main(String args[]) {
int data [] = null ;
System.out.println(data[0]) ;
}
}
圖四 執行結果二
必須提供有執行個體化對象才可以使用數組的操作形式進行數組的操作。
foreach疊代輸出
對于數組而言,一般都會使用for循環進行輸出,但是在使用傳統for循環輸出的時候往往都采用了下标的形式進行數組元素的通路。
範例:傳統形式
public class ArrayDemo {
public static void main (String args[ ]) {
int data [ ] = new int [ ] {1,2,3,4,5} ;
for(int x = 0 ;x < data.length ; x ++) {
System.out.println(data[x]) ;
}
}
}
圖五 執行結果三
而從JDK1.5之後為了減輕下标對程式的影響(如果下标處理不當則會出現數組越界異常),是以參考.NET中的設計引入了一個增強型的for循環(foreach),利用foreach的文法結構可以自動擷取數組中的每一個元素,避免下标通路,文法結構:
for (資料類型 變量 : 數組 | 集合) { }
最大的特點在于可以将數組中的每一個元素的内容取出儲存在變量裡面,這樣就可以直接通過變量擷取資料内容,而避免下标的方式來擷取了。
範例:使用foreach文法形式輸出
public class ArrayDemo {
public static void main (String args[ ]) {
int data [ ] = new int [ ] {1,2,3,4,5} ;
for(int temp : data) { //自動循環,将data數組的每個内容交給temp
System.out.println(temp) ;
}
}
}
圖六 執行結果四
這種文法的好處是可以避免下标的操作。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:以線及面--進入二維數組的世界 | 帶你學《Java面向對象程式設計》之十六 更多Java面向對象程式設計文章檢視此處