以前介紹的各種變量都是單獨聲明的,假若要求定義相同類型的一組變量,則需定義許多同類型的變量,顯然耗時耗力且不宜維護。爲此,編程語言引入了數組的概念,每一個數組都由一組相同類型的數據構成,對外有統一的數組名稱,對內經過序號區分每一個數據元素。
數組類型由基本的變量類型擴展而來,在基本類型後面加上一對方括號,便造成了該類型對應的數組類別。在Java代碼中聲明數組變量有兩種形式,一種是在變量名稱後面添加方括號,例如「int primeNumbers[]」;另外一種是在類型後面添加方括號,例如「int[] primeNumbers」。兩種形式表達的涵義徹底一致,都是聲明一個名叫primeNumbers的整型數組,只是書寫習慣上存在區別。
聲明完數組變量,還得給它分配存儲空間。一個數組有多長,包含幾個元素,這須要程序員事先予以指定。分配數組空間的途徑有三種,說明以下:
一、利用語句「new 變量類型[數組長度]」分配空間,好比但願數組primeNumbers可以容納四個元素,則可經過下面這行語句實現:java
// 在方括號內填入數字,表示數組有多大 primeNumbers = new int[4];
其中關鍵字new的意思是建立一塊存儲空間,方括號內部的數字表示該數組的元素個數。
二、在分配存儲空間的時候當即對數組進行初始化賦值,此時方括號中間不填數字,而在方括號後面添加花括號,而且花括號內部是以逗號分隔的一組數值。此時初始化賦值的代碼以下所示:程序員
// 方括號內留空,而後緊跟花括號,花括號內部是以逗號分隔的一組數值 primeNumbers = new int[]{2, 3, 5, 7};
三、上面的第二種寫法,之因此方括號內沒填數字,是由於花括號裏已經肯定了具體的元素數量。既然程序可以自動推導元素的數量,那麼從元素值也能推知該元素的變量類型,如此一來花括號前面的「new int[]」徹底是冗餘的,因而就造成了如下的簡化寫法:編程
// 如下是分配數組空間的第三種形式:賦值等號右邊直接跟着花括號 primeNumbers = {2, 3, 5, 7};
以上的賦值等號右邊直接跟着花括號,花括號裏面有四個整型數字,這便告訴編譯器:該數組須要分配四個元素大小,而且每一個元素都是整型數值。數組
如今數組變量總算佔據一塊地盤,根據數組名稱加上元素序號,便可訪問對應位置的數組元素。獲取某個數組元素的格式形如「數組名稱[元素序號]」,譬如primeNumbers[0]表示獲取下標爲0的數組元素,Java代碼裏的下標0對應平常生活中的第一個,所以primeNumbers[0]指的就是第一個數組元素。這個數組元素的用法跟普通變量同樣,既能對它賦值,也能把它打印出來。若要打印數組內部的全部元素數值,則可經過循環語句實現,經過「數組名稱.length」獲取該數組的長度,而後依次打印長度範圍以內的全部元素。下面是聲明一個整型數組,並對每一個數組元素賦值,最後遍歷打印各元素的完整代碼例子:編程語言
// 如下是聲明數組的第一種形式:「變量類型 數組名稱[]」 int primeNumbers[]; // 如下是分配數組空間的第一種形式 // 在方括號內填入數字,表示數組有多大 primeNumbers = new int[4]; // 數組名稱後面的「[數字]」,就是數組元素的下標,表示當前操做的是第幾個數組元素 primeNumbers[0] = 2; // 給下標爲0的數組元素賦值,下標0對應平常生活中的第一個 primeNumbers[1] = 3; // 給下標爲1的數組元素賦值,下標0對應平常生活中的第二個 primeNumbers[2] = 5; // 給下標爲2的數組元素賦值,下標0對應平常生活中的第三個 primeNumbers[3] = 7; // 給下標爲3的數組元素賦值,下標0對應平常生活中的第四個 // 下面經過循環語句依次讀出數組中的全部元素 // 「數組名稱.length」表示獲取該數組的長度(數組大小) for (int i=0; i<primeNumbers.length; i++) { // 打印下標爲i的數組元素 System.out.println("prime number = "+primeNumbers[i]); }
數組的一個應用方向爲數學上的數列運算,好比常見的斐波那契數列。話說數學家斐波那契養了一對兔子,他發現兔子出生兩個月後就有繁殖能力,而且一對兔子每月能生產一對小兔子,那麼一年事後,總共有多少對兔子?這個兔子問題看起來得一個月一個月去數,第一個月只有一對小兔子;第二個月小兔子長成大兔子,但總共還是一對兔子;第三個月大兔子生下一對小兔子,加起來有兩對兔子;第四個月大兔子又生下一對新的小兔子,上個月的小兔子長成大兔子,這下共有三對兔子……這麼一路數到第十二個月,把每月的兔子數量狀況整理爲下面的一張表格。日誌
上表所示的每個月兔子對數就構成了斐波那契數列,它的前12個數字依次爲:一、一、二、三、五、八、1三、2一、3四、5五、8九、144。仔細觀察發現該數列有個規律,從第三個數字開始,每一個數字都是前兩個數字之和,如3=2+一、5=3+二、8=5+3等等。因而大可沒必要絞盡腦汁去計算每月的兔子生育狀況,徹底能夠把這項工做交給計算機程序,讓Java代碼幫助咱們求解斐波那契數列。爲此先聲明一個大小爲12的整型數組,接着循環遍歷該數組,依次填入每一個元素的數值。按照上述思路編寫的程序代碼示例以下:blog
// 聲明一個兔子數量(多少對)的數組變量 int rabbitNumbers[]; // 一年有12個月,故兔子數組大小爲12 rabbitNumbers = new int[12]; // 循環計算兔子數組在每月的兔子對數 for (int i=0; i<rabbitNumbers.length; i++) { if (i < 2) { // 數列的頭兩個元素都是1 rabbitNumbers[i] = 1; } else { // 從第三個元素開始,每一個元素都等於它的前面兩個元素之和 rabbitNumbers[i] = rabbitNumbers[i-2] + rabbitNumbers[i-1]; } int month = i+1; // 打印當前的月份和兔子對數 System.out.println("第"+month+"個月,兔子對數="+rabbitNumbers[i]); }
最後運行這段整型數組的運算代碼,獲得下列的日誌記錄,從中可見斐波那契數列的前12個數字。編譯器
第1個月,兔子對數=1 第2個月,兔子對數=1 第3個月,兔子對數=2 第4個月,兔子對數=3 第5個月,兔子對數=5 第6個月,兔子對數=8 第7個月,兔子對數=13 第8個月,兔子對數=21 第9個月,兔子對數=34 第10個月,兔子對數=55 第11個月,兔子對數=89 第12個月,兔子對數=144