1. 程式人生 > 其它 >java陣列:陣列宣告、建立、初始化以及陣列角標越界

java陣列:陣列宣告、建立、初始化以及陣列角標越界

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;
    }
}