1. 程式人生 > >IT兄弟連 Java語法教程 陣列 陣列的初始化

IT兄弟連 Java語法教程 陣列 陣列的初始化

Java語言中陣列必須先初始化,然後才可以使用。所謂初始化,就是為陣列的陣列元素分配記憶體空間,併為每個陣列元素賦初始值。

這時有人會問,能不能只分配記憶體空間,不賦初始值呢?答案是肯定不行的,一旦為陣列的每個陣列元素分配了記憶體空間,每個記憶體空間裡儲存的內容就是該陣列元素的值,即使這個記憶體空間儲存的內容是空,這個空也是一個值(null),不管以哪種方式來初始化陣列,只要為陣列分配了記憶體空間,陣列元素就具有了初始值。初始值的獲得由兩種形式:一種由系統自動分配;另一種由程式設計師指定。

陣列的初始化有如下兩種方式:

靜態初始化:初始化時由程式設計師顯示指定每個陣列元素的初始值,由系統決定陣列長度。

動態初始化:初始化時程式設計師只指定陣列長度,由系統為陣列元素分配初始值。

1)靜態初始化:

靜態初始化的語法格式如下:

arrayName = new type[]{元素1,元素2,元素3,...};

在上面的語法格式中,前面的type就是陣列元素的資料型別,此處的type必須與定義陣列變數時所使用的type相同,也可以是定義陣列時所指定的type的子類,並使用花括號把所有的陣列元素括起來,多個數組元素之間以英文逗號隔開,定義初始化值的花括號緊跟在[]之後,值得指出的是,執行靜態初始化時,顯示指定的陣列元素值的型別必須與new關鍵字後的type型別相同,或者是其子類的例項,下面程式碼定義了使用這三種形式來進行靜態初始化。

//定義一個int陣列型別的變數,變數名為intArr

int[] intArr;

//使用靜態初始化,初始化陣列時只指定陣列元素的初始值,不指定陣列的長度

intArr = new int[]{5,6,7,8};

//定義一個Object陣列型別的變數,變數名為objArr

Object[] objAtt;

//使用靜態初始化,初始化陣列時陣列元素的型別是定義陣列時所指定的陣列元素型別的子類

objArr = new String[]{"java","php"};

Object[] objArr2;

//使用靜態初始化

objArr2 = new Object[]{"Java","php"};

因為Java語言是面向物件的程式語言,能很好的支援子類和父類的繼承關係:子類例項是一種特殊的父類例項。在上面的程式中,String型別是Object型別的子類,即字串是一種特殊的Object例項。

除此之外,靜態初始化還有如下簡化的語法格式:

type[] arrayName = {元素1,元素2,元素3,...};

在這種語法格式中,直接使用花括號來定義一個數組,花括號把所有的陣列元素括起來形成一個數組。只有在定義陣列的同時執行陣列初始化才支援使用簡化的靜態初始化。

在實際開發過程中,可能更習慣將陣列定義和陣列初始化同時完成。

2)動態初始化

動態初始化只指定陣列的長度,由系統為每個陣列元素指定初始值。動態初始化的語法格式如下:

arrayName = new type[length];

在上面的語法中,需要指定一個int型別的length引數,這個引數指定了陣列的長度,也就是可以容納陣列元素的個數,與靜態初始化相似的是,此處的type必須與定義陣列時使用的type型別相同,或者是定義陣列時使用的type型別的子類。下面程式碼示範瞭如何進行動態初始化:

//陣列的定義和初始化同時完成,使用動態初始化語法

int[] prices = new int[5];

//陣列的定義和初始化同時完成,初始化陣列時元素的型別是定義陣列時元素的子類

Object[] books = new String[4];

執行動態初始化時,程式設計師只需要指定陣列的長度,即為每個陣列元素指定所需的記憶體空間,系統負責為這些資料分配初始值。指定初始值時,系統按如下規則分配初始值:

陣列元素的型別是基本型別中的整數型別(byte、short、int、long),則元素的值是0。

陣列元素的型別是基本型別中的浮點型別(float、double),則元素的值是0.0。

陣列元素的型別是基本型別中的字元型別(char),則元素的值是’\u0000’。

陣列元素的型別是基本型別中的布林型別(boolean),則元素的值是false。

陣列元素的型別是引用型別(類,介面和陣列),則元素的值是null。

 

注意:不要同屬使用靜態初始化的動態初始化,也就是說,不要再進行陣列初始化時,既指定陣列的長度,也為每個陣列元素分配初始值。

 

在陣列初始化完成後,就可以使用陣列了,包括為陣列元素賦值、訪問陣列元素值和獲