數組:相同類型的、用一個標識符名封裝到一起是一個對象序列或基本類型資料序列。
一維數組的聲明:1 int[ ] a1; 2 int a1[ ]
兩種格式含義一樣,第二種符合c和c++程式員的習慣。第一種或許更合理,表明類型是“一個int型數組”。
編譯器不允許指定數組的大小。聲明數組的時候不能指定其長度(元素的個數)如int a[5]; //非法。初始化的時候可以指定大小。
Java中的數組必先初始化才可以使用,所謂初始化就是為數組的數組元素分配記憶體,並為每個數組元素賦值;現在只是對數組的一個引用(已經為該引用分配了儲存空間),並沒有給數組對象本身分配任何空間,初始化才會建立相應的儲存空間。
初始化的兩種方式:
靜態初始化:初始化時由我們自己指定每個數組元素的初始值,由系統決定需要的數組長度;
格式:數組名 = new 數群組類型[]{元素1,元素2,元素3...元素n}; a1 = new int{1,2,3,4,5};
簡化文法:數組名 = {元素1,元素2,元素3...元素n}; a1 = {1,2,3,4,5};
動態初始化:初始化時由我們指定數組的長度,由系統為數組元素分配初始值;
格式:數組名 = new 數群組類型[數組長度]; a1 = new int[ 8];
注意:不能靜態和動態初始化同時使用,也就是說不能同時指定數組的長度和元素;數組的長度一旦確定,就不能改變,也就數組是定長的;
所有數組都有一個固有成員,length,通過 數組名.length 可獲得數群組成員個數。java數組下標是從0開始的,最大下標為數組名.length-1。超出這個邊界會出現異常數組腳標越界異常(ArrayIndexOutOfBoundsException)。
記憶體分析:
樣本:
public class ArrayInit{ public static void main(String[] args){ int[] a1 ={1,2,3,4,5}; int[] a2; a2 =a1; for(int i =0;i<a2.length;i++) a2[i]=a2[i]+1; for(int i =0;i<a1.length;i++) System.out.println("a1["+ i +"] =" + a1[i]); }}輸出:a1[0]=2a1[1]=3a1[2]=4a1[3]=5a1[4]=6
給出了a1的初始值,但a2在後面被賦給a1數組,倆數組指向相同的堆地址,所以a2數組的值改變,a1也跟著改變。