陣列宣告和建立、記憶體分析、三種初始化、陣列邊界
阿新 • • 發佈:2021-12-01
陣列
陣列概述
- 相同型別資料的有序集合
- 陣列描述的是相同型別的若干個資料,按照一定的先後次序排列組合而成。
- 其中,每一個數據稱作陣列元素,每個陣列元素可以通過下標來訪問他們。
陣列宣告建立
- 首先必須宣告陣列變數,才能在程式中使用陣列。宣告方法如下:
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:陣列下標越界異常!
- 小結:
- 陣列是任意相同資料型別的有序集合
- 陣列也是物件。陣列元素相當於物件成員的變數
- 陣列長度是確定的不可變的