數組的定義和和內存分配
Java中定義數組的語法有兩種:
-
int[] arr;//第一種
-
int arr[];//第二種
這兩種形式上沒有區別,使用效果完全一樣。
與C、C++不同,Java在定義數組時並不爲數組元素分配內存空間,因此[]中無需指定數組元素的個數,也就是數組長度。
所以我們需要先分配內存空間,才能訪問數組中的元素。
而想要爲數組分配內存空間可以這樣:
-
int[] arr;//定義一個int數組變量arr
-
arr=new int[3];//爲int數組變量arr指定數組元素個數爲3,也就時分配內存空間。
也可以這樣寫:
int[] arr=new int[3];//這樣等於在定義int數組變量的時候,爲其分配內存空間。
數組的初始化
可以在聲明數組的同時進行初始化(靜態初始化),也可以在聲明以後進行初始化(動態初始化)。例如:
-
//靜態初始化
-
int[] arr=new int[]{1,2,3};
-
//動態初始化
-
String[] strArr=new String[3];
-
strArr[0]="Hello";
-
strArr[1]="World";
-
strArr[2]="Hello World";
數組引用
可以通過下標來引用數組:
arrName[index];
與C、C++不同,Java在數組元素引用要進行越界檢查以確保安全性,如果越界,就會拋出數組越界異常(java.lang.ArrayIndexOutOfBoundsException)。
每個數組都有可以拿length屬性來得到數組的長度。
【示例】輸入任意5個整數,輸出它們的和。
-
public class Demo {
-
public static void main(String[] args) {
-
int[] arr=new int[]{1,2,3,4,5};//定義一個int數組類型的變量arr,併爲其分配內存空間和初始化
-
int len=arr.length;//得到arr數組的長度
-
int total=0;//和
-
//注意,數組下標從0開始,到len-1結束
-
for(int i=0;i<=len-1;i++){
-
total+=arr[i];//求和
-
System.out.print(arr[i]+" ");//根據下標來輸出arr每個變量
-
}
-
System.out.println("和爲"+total);
-
}
-
}
數組的遍歷
可以使用for循環來遍歷
-
public class Demo {
-
public static void main(String[] args) {
-
int[] arr=new int[]{1,2,3,4,5};//定義一個int數組類型的變量arr,併爲其分配內存空間和初始化
-
int len=arr.length;//得到arr數組的長度
-
//注意,數組下標從0開始,到len-1結束
-
for(int i=0;i<=len-1;i++){
-
System.out.print(arr[i]+" ");//根據下標來輸出arr每個變量
-
}
-
}
-
}
不過Java爲我們提供了增強版的for循環(foreach),專門來遍歷數組,語法爲:
-
for( arrayType varName: arrayName ){
-
// 操作
-
}
arrayType爲數組類型,varName時用來保存當前元素的變量,每次循環這個變量的值都會改變,arrayName爲數組名。
二維數組
二維數組的聲明,初始化和引用和一維數組相似:
-
int intArray[ ][ ] = { {1,2}, {2,3}, {4,5} };
-
int a[ ][ ] = new int[2][3];
-
a[0][0] = 12;
-
a[0][1] = 34;
-
// ......
-
a[1][2] = 93;
Java語言中,由於把二維數組看作是數組的數組,數組空間不是連續分配的,所以不要求二維數組每一維的大小相同。
例如:
-
int a[ ][ ] = new int[2][ ];
-
a[0] = new int[3];
-
a[1] = new int[5];
幾點說明:
- 上面講的是靜態數組,靜態數組一旦被聲明,它的容量就固定了,不容改變。所以在聲明數組時,一定要考慮數組的最大容量,防止容量不夠的現象。
- 如果想在運行程序時改變容量,就需要用到Java集合中的ArrayList或者Vector了。
- 正是由於靜態數組容量固定的缺點,實際開發中使用頻率不高,被ArrayList或Vector代替,因爲實際開發中經常需要向數組中添加或刪除元素,而它的元素不好預估。