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