數組是存儲相同數據類型變量的容器。有了數組,我們可以很方便定義多個相同數據類型的變量,而不需要使用int 變量名的形式來定義。
數組有一維數組、二維數組、 . . . 、n維數組。但我們常用的是一維數組和二維數組。
一維數組
數組定義格式:
格式一:數組類型[] 數組名;
格式二:數組類型 數組名[];
推薦使用第一種格式來定義數組。
舉例:
int[] a; 定義了一個數組名爲a的數組
int a[]; 定義了一個數組名爲a的數組
在Java中要使用數組,就需要先對數組進行初始化纔可以。何爲初始化?初始化就是對數組中的各個元素分配內存空間,同時爲每個元素賦值。
數組的初始化有兩種方式:
- 動態初始化
- 靜態初始化
所謂動態初始化是我們在定義數組的時候,只給出數組的長度,由系統給數組賦初始值。
動態初始化的格式:
數組類型[] 數組名 = new 數組類型[數組長度];
所謂的數組長度就是數組中元素的個數。
舉例:
int[] a = new int[10];
所謂靜態初始化是在定義數組的時候,我們給數組賦初始值,但是數組的長度由系統給出。
靜態初始化的格式:
數組類型[] 數組名 = new 數組類型[]{元素1,元素2,元素3,. . .};
簡化格式爲:
數組類型[] 數組名 = {元素1,元素2,. . .};
數組的訪問
瞭解了數組如何進行初始化之後,我們就可以利用數組下標來訪問數組了,即 數組名[下標];需要注意的是數組的下標是從0開始的,到數組長度-1結束。
舉例:
int[] a = new int[3]; // 定義了一個長度爲3的數組
a[1] = 3;
數組的遍歷:
但在訪問數組的時候我們稍不注意就會遇到以下兩個常見的問題:
- ArrayIndexOutOfBoundsException:這個問題是數組索引越界異常。
產生這個問題的原因就是訪問了不存在的索引。 - NullPointerException:這個問題是空指針異常。
- 產生這個問題的原因是,在棧內存已經釋放了指向在堆內存的數組指針,我們還要去訪問這個數組的元素,其實是無法訪問的。
二維數組
何爲二維數組?
在瞭解掌握一維數組的基礎上,二維數組很容易理解。二維數組就是每一個元素都是一維數組的數組。
二維數組的定義:
- 數據類型[][] 數組名;
初始化二維數組的方式同樣也分爲動態初始化和靜態初始化。
動態初始化:
-
數組類型[][] 數組名 = new 數組類型[m][n];
m表示的是這個二維數組有多少個一維數組
n表示的是每個一維數組中有多少個元素
簡單理解:m是數組的行數,n是數組的列數
舉例:
i
該語句的意思是我們定義了一個3行4列的二維數組,數組名爲array。在這個數組中有三個一維數組,每個一維數組中有四個元素。
除此之外,我們還可以這樣定義數組:
數組類型 數組名[][] = new 數組類型[][];
數組類型[] 數組名[] = new 數組類型[][];
但是還是最好還是以 數組類型[][] 數組名 = new 數組類型[m][n]; 這樣的方式定義數組。
-
數據類型[][] 數組名 = new 數據類型[m][];
m表示的是這個二維數組有幾個一維數組,即二維數組有幾行,但是沒有明確定義這個每個一維數組中有幾個元素,即沒有明確定義二維數組的列數,此時二維數組的列數可以動態給出。
舉例:
定義了一個數組名爲array的二維數組,其中有三個一維數組,沒有明確定義每個一維數組的元素個數,此時元素個數可以動態給出。
靜態初始化
- 數據類型[][] 數組名 = new 數據類型[][]{{元素…},{元素…},{元素…}…};
簡單點寫,可以寫爲:
數據類型[][] 數組名 = {{元素…},{元素…},{元素…}…};
這樣的方式是直接給數組賦了初始值,數組的長度由系統給出。
舉例:
定義了二維數組後,我們可以使用數組名[下標1][下標2] 來進行二維數組元素的訪問。其中i代表的是二維數組的行數,範圍爲0到行數-1;j代表的是二維數組的列數,範圍爲0到列數-1。
二維數組元素的訪問:
二維數組的遍歷: