1. 程式人生 > 其它 >陣列宣告和建立、記憶體分析、三種初始化、陣列邊界

陣列宣告和建立、記憶體分析、三種初始化、陣列邊界

陣列

陣列概述

  • 相同型別資料的有序集合
  • 陣列描述的是相同型別的若干個資料,按照一定的先後次序排列組合而成。
  • 其中,每一個數據稱作陣列元素,每個陣列元素可以通過下標來訪問他們。

陣列宣告建立

  • 首先必須宣告陣列變數,才能在程式中使用陣列。宣告方法如下:
dataType[] arrayRefVar;	//首選的方法

dataType arrayRefVar[];	//效果相同,但不是首選的方法
  • Java語言使用new操作符來建立陣列,語法如下:
dataType[] arrayfVar = new dataType[arraySize];
  • 資料的元素是通過索引訪問的,陣列索引從0開始。
  • 獲取陣列長度:
arrays.length

  • 陣列的四個基本特點>
  • 其長度是確定的。陣列一旦被建立,他的大小就是可以改變的。
  • 其元素必須是相同型別,不允許出現混合型別。
  • 陣列中的元素可以是任何資料型別,包括基本型別和引用型別。
  • 陣列變數屬於引用型別,陣列也可以看成是物件,陣列中的每個元素相當於該物件的成員變數。

​ 陣列本身就是物件,Java中物件是在堆中的,因此陣列無論保持原始型別還是其它物件型別,

陣列物件本身是在堆中的

記憶體分析

  • Java記憶體分析:

Java記憶體:

堆 >存放new的物件和陣列,可以被所有的執行緒共享,不會存放別的物件引用。

棧 >

存放基本變數型別(會包含這個基本型別的具體數值),

引用物件的變數(會存放這個引用在堆裡面的具體地址)

方法區>

可以被所有執行緒共享,包含了所有的class和static變數

  • 寫程式碼畫圖分析記憶體!

![1638321064916](

)

程式碼如下:

package com.guoba.Array;

public class Demo01 {
    public static void main(String[] args) {
        //1.宣告一個數組
        int[] nums;
        //2.建立一個數組
        nums = new int[10];
        //3.給陣列中的元素賦值
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;
        nums[5] = 6;
        nums[6] = 7;
        nums[7] = 8;
        nums[8] = 9;
        nums[9] = 10;
        //輸出陣列中下標為9的元素的值
        System.out.println(nums[9]);//10
        //計算所有元素的和
        int sum = 0;
        //獲取陣列長度:arrays.length
        for (int i = 0; i < nums.length; i++) {
            sum = sum + nums[i];
        }
        System.out.println("陣列的總和為:"+sum);//1+2+3+4+...+10

    }


}

三種初始化

  • 靜態初始化
int[] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};
  • 動態初始化
int[] a = new int[2];
a[0] = 1;
a[1] = 2;
  • 陣列預設的初始化
    • 陣列也是引用型別,它的元素相當於類的例項變數,因此陣列一經分配空間,
    • 其中每個元素也被按照例項變數同樣的方式被隱式初始化。
package com.guoba.Array;

public class Demo02 {
    public static void main(String[] args) {
        //靜態初始化:建立 + 賦值
        int[] a = {1,2,3,4,5};
        System.out.println("a[0]:"+a[0]);//輸出a陣列下標為0的元素:1
        //動態初始化:包含預設初始化
        int[] b = new int[10];
        b[0] = 10;
        System.out.println("b[0]:"+b[0]);//輸出b陣列下標為0的元素:10
        System.out.println("b[1]:"+b[1]);//未賦值但預設初始化,值為0
    }
}

陣列邊界

  • 下標的合法區間:[0,length-1],如果越界就會報錯!
  • ArrayIndexOutOfBoundsException:陣列下標越界異常!
  • 小結:
    • 陣列是任意相同資料型別的有序集合
    • 陣列也是物件。陣列元素相當於物件成員的變數
    • 陣列長度是確定的不可變的