java陣列:陣列宣告、建立、初始化以及陣列角標越界
阿新 • • 發佈:2021-09-04
java陣列
陣列的定義
- 陣列是相同型別資料的有序集合
- 陣列描述的是相同型別的若干個資料,按照一定的先後次序排列組合而成
- 其中,每一個數據乘坐一個數組元素,每一個數組元素可以通過一個下標來訪問他們
陣列宣告建立
-
首先必須宣告陣列變數,才能在程式中使用陣列,下面是宣告陣列變數的語法:
dataType[] arrayRefVar; //首選方法 或者 dataType arrayRefVar[];//效果相同,但不是首選方法
-
Java語言通過new操作符來建立陣列,語法如下:
dataType[] arrayRefVar=new dataType[arraySize]
-
陣列的元素是通過索引訪問的,陣列索引從0開始
-
獲取陣列長度 arrays.length
java記憶體分析:
- 堆記憶體:存放new的物件和陣列,可以被所有的執行緒共享,不會存放別的物件引用
- 棧記憶體:存放基本變數型別(包含這個基本型別的具體數值),引用物件的變數(會存放這個引用在堆裡面的具體地址)
- 方法區:可以被所有的執行緒共享,包含了所有的class和static變數
三種初始化
-
靜態初始化
int[] a={1,2,3};
-
動態初始化
int[] a=new int[2]; a[0]=1; a[1]=2;
-
陣列的預設初始化
- 陣列是引用型別,他的元素相當於類的例項變數,因此陣列一經分配空間,其中的每個元素也被按照例項變數同樣的方式隱式初始化
package com.ljh.array; public class Demo1 { public static void main(String[] args) { int[] arr1={1,2,3,4}; for (int x=0;x<arr1.length;x++){ System.out.println(arr1[x]); } int[] arr2=new int[10]; arr2[0]=5; arr2[1]=6; System.out.println(arr2[2]); } }
陣列的四個基本特點
- 其長度是確定的。陣列一旦被建立,它的大小就是不可以改變的
- 其元素必須是相同型別,不允許出現混合型別
- 陣列中的元素可以是任何資料型別,包括基本型別和引用型別
- 陣列變數屬於引用型別,陣列也可以看成物件,陣列中的每個元素相當於該物件的成員變數,陣列本身就是物件,java中物件是在堆中的,因此陣列無論儲存原始型別還是其他物件型別,
陣列物件本身是在堆中的。
陣列邊界
-
下標的合法區間:[0,length-1],如果越界就會報錯
package com.ljh.array; /** * 下標越界 */ public class Demo2 { public static void main(String[] args) { int[] arr={12,23,45}; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } System.out.println(arr[3]); } }
-
ArrayIndexOutOfBoundsException:陣列下標越界異常
-
小結:
- 陣列是相同資料型別(型別可以為任意型別)的有序集合
- 陣列也是物件。陣列元素相當於物件的成員變數
- 陣列建立完成後長度確定的,不可變的。如果角標越界,則報:ArrayIndexOutOfBoundsException
陣列作為方法引數
public static void printArr(int[] arr){
for (int a:arr){
System.out.println(a);
}
}
陣列作為方法返回值
public static int[] reversalArr2(int[] arr){
int[] newArr=new int[arr.length];
for (int x=0,y=arr.length-1;x<arr.length;x++,y--){
newArr[y]=arr[x];
}
return newArr;
}
package com.ljh.array;
import java.util.Arrays;
/**
* 反轉陣列
*/
public class Demo3 {
public static void main(String[] args) {
int[] arr=new int[]{1, 2, 3, 47, 9, 10};
printArr(arr);
int[] ints = reversalArr(arr);
System.out.println(Arrays.toString(ints));
}
public static void printArr(int[] arr){
for (int a:arr){
System.out.println(a);
}
}
//反轉陣列
public static int[] reversalArr(int[] arr){
for (int x=0,y=arr.length-1;x<y;x++,y--){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
return arr;
}
//反轉陣列
public static int[] reversalArr2(int[] arr){
int[] newArr=new int[arr.length];
for (int x=0,y=arr.length-1;x<arr.length;x++,y--){
newArr[y]=arr[x];
}
return newArr;
}
}