055 01 Android 零基礎入門 01 Java基礎語法 06 Java一維陣列 02 陣列的概念
055 01 Android 零基礎入門 01 Java基礎語法 06 Java一維陣列 02 陣列的概念
本文知識點:陣列的概念
陣列的宣告建立、初始化
在學習陣列的宣告建立、初始化前,我們可以和之前的變數的宣告建立、初始化進行對比來學習。
那我們來看一下陣列的宣告,先來看一下語法格式。
陣列的宣告
陣列宣告語法格式1
陣列宣告格式1:
資料型別 [] 陣列名;
變數宣告格式:
資料型別 變數名;
陣列宣告相比變數宣告,在資料型別後增加了一箇中括號。而陣列名的命名規則和變數名的命名規則是一致的。它本身是一個識別符號,要滿足識別符號的命名規則。並且像變數名一樣,如果陣列名是由一個單片語成的,所有字母都是小寫的。如果由多個單片語成的,第一個單詞全部小寫,從第二個單詞開始,首字母全部大寫。
陣列宣告語法格式2
陣列宣告格式2:
資料型別 陣列名 [];
說明一下,為什麼陣列宣告有這兩種形式:
因為其他的程式語言,比如說C語言,C++,大家都是把中括號寫在陣列名的後面(即和我們學習的Java陣列宣告語法格式2相同)。Java為了和其他程式語言進行區分呢,Java就建立了自己的命名方式。就是把中括號寫在資料型別的後面(陣列宣告語法格式1)。那麼,第一種陣列宣告的語法格式才是我們在Java進行陣列宣告的時候,常用的形式。
案例練習如何宣告陣列——使用2種語法格式
宣告一個整型陣列如下:
int [] myIntArray ;
int myIntArray [];
以上兩種宣告方式都是正確的。
當然,如果你要生成其他型別的陣列呢,就把相應的資料型別的名稱進行改變即可。比如我們生成一個char型別的陣列、生成字串String型別的陣列。
記住:字串本身是一個類
以上是陣列的宣告。
然後我們看下陣列的建立。
陣列的建立
陣列建立形式1:
先宣告、後建立
1、先去宣告一個數組
2、再去建立陣列
如何建立呢?陣列建立形式1:
陣列名 = new 資料型別[陣列長度];
new是一個關鍵字,在後面的面向物件程式中呢,我們會遇到很多次new,new關鍵字其實是在建立一個物件。目前我們先知道有這個概念即可。對於陣列問題,我們知道new是在建立陣列即可。
例題:宣告並建立一個長度為10的整型陣列:
int [] arr;//宣告陣列 arr = new int[10];//建立陣列
陣列建立形式2:
宣告陣列的同時建立陣列:
這個類似變數的初始化,但是陣列中不叫初始化,稍後我們對初始化的內容進行演示。
陣列建立形式2:
資料型別 [] 陣列名 = new 資料型別[陣列長度];
注意:
1、建立陣列時,陣列長度必須被指定,如果沒有指定,是錯誤的。
2、宣告時(賦值號=)左邊的中括號寫在陣列名之前、陣列名之後都是正確的。
陣列在記憶體中的儲存
我們前面學習變數的時候學習了:定義一個變數之後,變數就會在記憶體中儲存。同樣地,定義陣列之後,也會在記憶體中分配記憶體空間,用來儲存陣列中的資料。而陣列比較特別的一點是:陣列在記憶體中分配的,肯定是一段連續的記憶體空間。
比如,我們定義一個整型的陣列a:
int [] a = new int [5];
a是一個長度為5的整型陣列,會在記憶體中開闢一塊連續的記憶體空間。並且陣列的預設值,對於整型陣列來說,它的預設值都是0。所以我們知道,在這片連續的記憶體空間當中,每個陣列元素的值都為0。就是說,長度為5的陣列,它肯定有5個元素。那麼這5個元素,它的每一個元素的元素值都是0。而我們的陣列名本質是一個物件(陣列是引用資料型別,即類型別,類建立的就是物件),它(陣列名)是指向陣列的第一個元素。這點在後面進行方法傳值的時候是非常重要的。
這是陣列的儲存形式,需要注意的是:
陣列的陣列元素都有預設的元素值。後面我們會學習,其他資料型別建立的陣列的陣列元素的預設值都是什麼!
這裡,我們在強調一點,即區域性變數。區域性變數(在主方法中、在迴圈中我們學習的)都是沒有預設值的。我們之前遇到過類似的問題,我們需要給區域性變數進行賦值的。但是陣列是有預設值的。因為陣列的本質是物件。
陣列的初始化
初始化的定義:宣告的同時給變數賦值。
我們前面看到的new 資料型別[陣列長度]; 不叫初始化,而叫做建立物件。
注意:
1、元素之間用逗號分隔(英文逗號)
2、整個程式碼書寫都必須是在英文輸入法狀態之下的 否則,會報錯。
上面的問題也是初學者經常會犯的錯誤。
那麼陣列長度是什麼呢?陣列長度:陣列初始化時所給元素的個數,即為陣列長度。
比如上面的例子中:
int [] arr = {1,2,3,4,5,6,7,8,9,10};
從1到10共計10個元素,那麼陣列長度就是10。
接下來,我們再看一下陣列元素的引用。
陣列元素的引用
前面提到過了,總說定義長度為10的陣列,那麼對於陣列當中的每一個元素是如何進行表示的呢?
我們來看一下語法格式:
陣列名[陣列元素下標]
這裡面,注意一下,陣列元素下標是整型的數字,並且陣列元素下標是從0開始的,其實整個“陣列名[陣列元素下標]“ 這樣一個整體, 我們可以把這個整體看做是一個變數名。
我們看一下陣列元素的引用的一個圖例。
int [] a = {1,2,3,4,5,6,7,8,9,10};
10個元素對應10個連續的記憶體空間中。注意:陣列一定是存放在連續的記憶體空間中。
我們把:
第1個元素表示為a[0], 注意,陣列下標從0開始。
第2個元素表示為a[1],
第3個元素表示為a[2],
……
第10個元素表示為a[9],
這就類似變數和變數值之間的對應關係。比如,我們定義一個變數n:
int n = 10;
那麼,n是變數名,10是變數值。同樣的,a[0]表示陣列a給1個位置處的陣列元素起的名字,所以,我們說可以把a[0]這個整體看做一個變數名。而它所對應的值就是1。
陣列元素引用的問題中,始終要記得:陣列元素下標是從0開始。重要的事我已經說了三遍,不行你回顧文章數一數。
陣列的長度
上面陣列初始化的時候提過,陣列長度就是陣列元素的個數。
在陣列中,還有一個屬性 ,叫做length。length屬性是表示陣列長度的。如何使用屬性呢?
使用格式:
陣列名.length
使用方法類似我們前面從鍵盤接收資料時用到的sc.nextInt(); nextInt()有括號,而length屬性沒有括號。因為nextInt()是方法,需要括號。而length是屬性,不需要括號。這些後面面向物件的知識會涉及到,現在有個瞭解就好了。(其實都是引用資料型別,物件引用屬性或者物件飲用方法的形式)
Scanner sc = new Scanner(System.in);
sc.nextInt();