1.2 一维数组的定义、赋值和初始化
當(dāng)數(shù)組中每個元素都只帶有一個下標(biāo)時,這種數(shù)組就是“一維數(shù)組”。一維數(shù)組(one-dimensional array)實質(zhì)上是一組相同類型數(shù)據(jù)的線性集合,是數(shù)組中最簡單的一種數(shù)組。
數(shù)組是引用數(shù)據(jù)類型,引用數(shù)據(jù)類型在使用之前一定要做兩件事情:聲明和初始化。所以本文將重點介紹一維數(shù)組的創(chuàng)建、初始化和使用。
創(chuàng)建一維數(shù)組
為了在程序中使用一個數(shù)組,必須聲明一個引用該數(shù)組的變量,并指明整個變量可以引用的數(shù)組類型。聲明一維數(shù)組的語法格式為:
type[] arrayName; // 數(shù)據(jù)類型[] 數(shù)組名; 建議用這個或者
type arrayName[]; // 數(shù)據(jù)類型 數(shù)組名[];可見數(shù)組的聲明有兩種形式:一種是中括號”[]“跟在元素數(shù)據(jù)類型之后,另一種是中括號”[]“跟在變量名之后。
對于以上兩種語法格式而言,Java 更推薦采用第一種聲明格式,因為第一種格式不僅具有更好的語意,而且具有更好的可讀性。對于第一種格式type[] arrayName,很容易理解這是定義一個變量,其中變量名是 arrayName,而變量類型是 type[]。
前面已經(jīng)指出:type[] 確實是一種新類型,與 type 類型完全不同(例如 int 類型是基本類型,但 int[] 是引用類型)。因此,這種方式既容易理解,也符合定義變量的語法。但第二種格式type arrayName[]的可讀性就差了,看起來好像定義了一個類型為 type 的變量,而變量名是 arrayName[],這與真實的含義相去甚遠(yuǎn)。
可能有些讀者非常喜歡type arrayName[]這種定義數(shù)組的方式,這可能是因為早期某些計算機(jī)讀物的誤導(dǎo),從現(xiàn)在開始最好就不要再使用這種糟糕的方式了。
以上兩種格式都可以聲明一個數(shù)組,其中的數(shù)據(jù)類型既可以是基本數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型。數(shù)組名可以是任意合法的變量名。聲明數(shù)組就是要告訴計算機(jī)該數(shù)組中數(shù)據(jù)的類型是什么。例如:
int[] score; // 存儲學(xué)生的成績,類型為整型 double[] price; // 存儲商品的價格,類型為浮點型 String[] name; // 存儲商品名稱,類型為字符串型在聲明數(shù)組時不需要規(guī)定數(shù)組的長度,例如:
int score[10]; // 這是錯誤的注意:在聲明數(shù)組變量時千萬不要漏寫[]。
分配空間
聲明了數(shù)組,只是得到了一個存放數(shù)組的變量,并沒有為數(shù)組元素分配內(nèi)存空間,不能使用。因此要為數(shù)組分配內(nèi)存空間,這樣數(shù)組的每一個元素才有一個空間進(jìn)行存儲。
簡單地說,分配空間就是要告訴計算機(jī)在內(nèi)存中為它分配幾個連續(xù)的位置來存儲數(shù)據(jù)。在 Java 中可以使用 new 關(guān)鍵字來給數(shù)組分配空間。分配空間的語法格式如下:
arrayName = new type[size]; // 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長度];其中,數(shù)組長度就是數(shù)組中能存放的元素個數(shù),顯然應(yīng)該為大于 0 的整數(shù),例如:
score = new int[10]; price = new double[30]; name = new String[20];這里的 score 是已經(jīng)聲明過的 int[] 類型的變量,當(dāng)然也可以在聲明數(shù)組時就給它分配空間,語法格式如下:
type[] arrayName = new type[size]; // 數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長度];例 1
例如,聲明并分配一個長度為 5 的 int 類型數(shù)組 arr,代碼如下:
執(zhí)行后 arr 數(shù)組在內(nèi)存中的格式如圖 1 所示。
在圖 1 中 arr 為數(shù)組名稱,方括號“[]”中的值為數(shù)組的下標(biāo)。數(shù)組通過下標(biāo)來區(qū)分?jǐn)?shù)組中不同的元素,并且下標(biāo)是從 0 開始的。因此這里包含 5 個元素的 arr 數(shù)組最大下標(biāo)為 4。
注意:一旦聲明了數(shù)組的大小,就不能再修改。這里的數(shù)組長度也是必需的,不能少。
盡管數(shù)組可以存儲一組基本數(shù)據(jù)類型的元素,但是數(shù)組整體屬于引用數(shù)據(jù)類型。當(dāng)聲明一個數(shù)組變量時,其實是創(chuàng)建了一個類型為“數(shù)據(jù)類型[]”(如 int[]、double[]、String[])的數(shù)組對象,它具有表 1 所示的方法和屬性。
初始化一維數(shù)組
Java 語言中數(shù)組必須先初始化,然后才可以使用。所謂初始化,就是為數(shù)組的數(shù)組元素分配內(nèi)存空間,并為每個數(shù)組元素賦初始值。
能不能只分配內(nèi)存空間,不賦初始值呢?
不行,一旦為數(shù)組的每個數(shù)組元素分配了內(nèi)存空間,每個內(nèi)存空間里存儲的內(nèi)容就是該數(shù)組元素的值,即使這個內(nèi)存空間存儲的內(nèi)容為空,這個空也是一個值(null)。不管以哪種方式來初始化數(shù)組,只要為數(shù)組元素分配了內(nèi)存空間,數(shù)組元素就具有了初始值。初始值的獲得有兩種形式,一種由系統(tǒng)自動分配,另一種由程序員指定。
數(shù)組在初始化數(shù)組的同時,可以指定數(shù)組的大小,也可以分別初始化數(shù)組中的每一個元素。在 Java 語言中,初始化數(shù)組有以下 3 種方式。
1)使用 new 指定數(shù)組大小后進(jìn)行初始化
使用 new 關(guān)鍵字創(chuàng)建數(shù)組,在創(chuàng)建時指定數(shù)組的大小。語法如下:
創(chuàng)建數(shù)組之后,元素的值并不確定,需要為每一個數(shù)組的元素進(jìn)行賦值,其下標(biāo)從 0 開始。
例 2
創(chuàng)建包含 5 個元素的 int 類型的數(shù)組,然后分別將元素的值設(shè)置為 1、2、3、5 和 8。代碼如下:
如果程序員只指定了數(shù)組的長度,那么系統(tǒng)將負(fù)責(zé)為這些數(shù)組元素分配初始值。指定初始值時,系統(tǒng)按如下規(guī)則分配初始值。
- 數(shù)組元素的類型是基本類型中的整數(shù)類型(byte、short、int 和 long),則數(shù)組元素的值是 0。
- 數(shù)組元素的類型是基本類型中的浮點類型(float、double),則數(shù)組元素的值是 0.0。
- 數(shù)組元素的類型是基本類型中的字符類型(char),則數(shù)組元素的值是‘\u0000’。
- 數(shù)組元素的類型是基本類型中的布爾類型(boolean),則數(shù)組元素的值是 false。
- 數(shù)組元素的類型是引用類型(類、接口和數(shù)組),則數(shù)組元素的值是 null。
2)使用 new 指定數(shù)組元素的值
使用上述方式初始化數(shù)組時,只有在為元素賦值時才確定值??梢圆皇褂蒙鲜龇绞?#xff0c;而是在初始化時就已經(jīng)確定值。語法如下:
例 3
更改例 2 中的代碼,使用 new 直接指定數(shù)組元素的值。代碼如下:
上述代碼的效果等價于例 2 的效果。
注意:不要在進(jìn)行數(shù)組初始化時,既指定數(shù)組的長度,也為每個數(shù)組元素分配初始值,這樣會造成代碼錯誤。例如下面代碼:
int[] number = new int [5] {1,2,3,4,?5};3)直接指定數(shù)組元素的值
在上述兩種方式的語法中,type 可以省略,如果已經(jīng)聲明數(shù)組變量,那么直接使用這兩種方式進(jìn)行初始化。如果不想使用上述兩種方式,那么可以不使用 new 直接指定數(shù)組元素的值。語法如下:
例 4
在前面例子的基礎(chǔ)上更改代碼,直接使用上述語法實現(xiàn) number 數(shù)組的初始化。代碼如下:
使用這種方式時,數(shù)組的聲明和初始化操作要同步,即不能省略數(shù)組變量的類型。如下的代碼就是錯誤的:
int[] number; number = {1,2,3,5,8};獲取單個元素
獲取單個元素是指獲取數(shù)組中的一個元素,如第一個元素或最后一個元素。獲取單個元素的方法非常簡單,指定元素所在數(shù)組的下標(biāo)即可。語法如下:
arrayName[index];其中,arrayName 表示數(shù)組變量,index 表示下標(biāo),下標(biāo)為 0 表示獲取第一個元素,下標(biāo)為 array.length-1 表示獲取最后一個元素。當(dāng)指定的下標(biāo)值超出數(shù)組的總長度時,會拋出 ArraylndexOutOfBoundsException 異常。
例 5
獲取 number 數(shù)組中的第一個元素、最后一個元素和第六個元素,并將元素的值輸出。代碼如下:
執(zhí)行上述代碼,輸出結(jié)果如下所示:
獲取第一個元素:1 獲取最后一個元素:8 java.lang.ArrayIndexOutOfBoundsException: 5我們一共存入了 5 個值,所以下標(biāo)的取值為 0~4。因為 number[5] 取出的內(nèi)容超過了這個下標(biāo),所以輸出結(jié)果會提示數(shù)組索引超出綁定異常(ArrayIndexOutOfBoundsException)。這一點是在使用數(shù)組中是經(jīng)常出現(xiàn)的問題,大家在編寫程序時應(yīng)該引起注意。
例 6
編寫一個 Java 程序,使用數(shù)組存放錄入的 5 件商品價格,然后使用下標(biāo)訪問第 3 個元素的值。
上述代碼的“int[] prices = new int[5]”語句創(chuàng)建了需要 5 個元素空間的 prices 數(shù)組,然后結(jié)合 for 循環(huán)向數(shù)組中的每個元素賦值。
注意:在 Java 中取得數(shù)組的長度(也就是數(shù)組元素的長度)可以利用“數(shù)組名稱.length”,返回一個 int 型數(shù)據(jù)。
數(shù)組的索引從 0 開始,而 for 循環(huán)中的變量 i 也從 0 開始,因此 score 數(shù)組中的元素可以使用 scored 來表示,大大簡化了代碼。最后使用 prices[2] 獲取 prices 數(shù)組的第 3 個元素,最終運行效果如下所示。
請輸入第1件商品的價格: 5 請輸入第2件商品的價格: 4 請輸入第3件商品的價格: 6 請輸入第4件商品的價格: 4 請輸入第5件商品的價格: 8 第 3 件商品的價格為:6獲取全部元素
當(dāng)數(shù)組中的元素數(shù)量不多時,要獲取數(shù)組中的全部元素,可以使用下標(biāo)逐個獲取元素。但是,如果數(shù)組中的元素過多,再使用單個下標(biāo)則顯得煩瑣,此時使用一種簡單的方法可以獲取全部元素——使用循環(huán)語句。
下面利用 for 循環(huán)語句遍歷 number 數(shù)組中的全部元素,并將元素的值輸出。代碼如下:
int[] number = {1,2,3,5,8}; for (int i=0;i<number.length;i++) {System.out.println("第"+(i+1)+"個元素的值是:"+number[i]); }除了使用 for 語句,還可以使用 foreach 遍歷數(shù)組中的元素,并將元素的值輸出。代碼如下:
for(int val:number) {System.out.print("元素的值依次是:"+val+"\t"); }總結(jié)
以上是生活随笔為你收集整理的1.2 一维数组的定义、赋值和初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.1 Java数组简介:数组是什么?
- 下一篇: 1.3 Java二维数组详解