數組
一、認識數組
1.什么是數組
- 數組就是一個容器,用來存一批同種類型的數據。
舉例
20, 10, 80, 60, 90
int[] arr = {20, 10, 80, 60, 90};張三, 李四, 王五
String[] names = {"張三", "李四", "王五"};
2.為什么要使用數組
假設用變量解決隨機點名的需求
- 代碼繁瑣:大量變量的定義。
- 實現需求繁瑣。
String name1 = "張譽";
String name2 = "劉疏桐";
String name3 = "田啟峰";
...
...
String name68= "張學穎";
String name69= "李沁霖";
String name70= "陳侃";Random r = new Random();
int number = r.nextInt(70) + 1; // 1 - 70
switch (number){
case 1:
System.out.println(name1 + "出來回答問題!");
break;
case 1:
System.out.println(name2 + "出來回答問題!");
break;
...
}
用數組解決隨機點名的需求
- 代碼簡潔。
- 邏輯清晰。
String[] names = {“張譽”, “劉疏桐”, “田啟峰”,… “張學穎”, “李沁霖”, “陳侃”,};
Random r = new Random();
int i = r.nextInt(70); // 0- 69
System.out.println(names[i] + “出來回答問題!”)
結論
- 結論:遇到批量數據的存儲和操作時,數組比變量更適合。
二、數組的定義和訪問
1.靜態初始化數組
1.1 定義
- 義數組的時候直接給數組賦值。
1.2 靜態初始化數組的格式
- 數據類型[] 數組名 = new 數據類型[]{元素1,元素2 ,元素3… };
// 完整格式
int[] ages = new int[]{12, 24, 36}
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
- 數據類型[] 數組名 = { 元素1,元素2 ,元素3,… };
// 簡化格式
int[] aes = {12, 24, 36};
注意
- “數據類型[] 數組名”也可寫成 “數據類型 數組名[] ”。
- 什么類型的數組只能存放什么類型的數據。
- 數組變量名中存儲的是數組在內存中的地址,數組是一種引用數據類型。
1.3 數組的訪問
1.3.1 數組的訪問
- 數組名[索引]
// 取值
System.out.println(arr[0]); // 12
// 賦值
arr[2] = 100;
System.out.println(arr[2]); // 100
1.3.2 數組的長度屬性:length
// 獲取數組的長度(就是數組元素的個數)
System.out.println(arr.length); // 3
1.3.3 數組的最大索引
數組名. length – 1 // 前提:元素個數大于0
注意:
- 訪問數組時,若使用的索引超過了數組最大索引,執行程序時會出bug,出現一個索引越界的異常提示
1.4 數字的遍歷
1.4.1 遍歷定義
- 就是一個一個數據的訪問。
1.4.2 為什么要遍歷數組
- 求和
- 元素搜索
- 找最大值
- 找最小值
2.動態初始化數組
2.1 定義
- 定義數組時先不存入具體的元素值,只確定數組存儲的數據類型和數組的長度
2.2 數組的動態初始化格式
數據類型[] 數組名 = new 數據類型[長度];
int[] arr = new int[3];// 后賦值
arr[0] = 10;
System.out.println(arr[0]); // 10
注意
靜態初始化和動態初始化數組的寫法是獨立的,不可以混用。
2.3 動態初始化數組元素默認值規則
數據類型 | 默認值 |
---|---|
byte、short、char、int、long | 0 |
float、double | 0.0 |
boolean | false |
類、接口、數組、String | null |
3.數組在計算機中的執行原理
3.1 數組的執行原理,Java程序的執行原理
3.1.1 ava 內存分配介紹
- 方法區
- 棧
- 堆
- 本地方法棧
- 寄存器
簡單說說 int a = 20; int[] arr = new int[3]這兩行代碼的執行原理?
- a是變量,直接放在棧中,a變量中存儲的數據就是20這個值。
- new int[3]是創建一個數組對象,會在堆內存中開辟區域存儲3個整數。
- arr是變量,在棧中,arr中存儲的是數組對象在堆內存中的地址值。
3.2 多個變量指向同一個數組的問題
- 如果某個數組變量存儲的地址是null,那么該變量將不再指向任何數組對象
總結
-
多個數組變量,指向同一個數組對象的原因是什么?需要注意什么?
- 多個數組變量中存儲的是同一個數組對象的地址。
- 多個變量修改的都是同一個數組對象中的數據。
-
如果某個數組變量中存儲的null,代表什么意思?需要注意什么?
-
代表這個數組變量沒有指向數組對象。
p-1747228570011)] -
如果某個數組變量存儲的地址是null,那么該變量將不再指向任何數組對象
總結
-
多個數組變量,指向同一個數組對象的原因是什么?需要注意什么?
- 多個數組變量中存儲的是同一個數組對象的地址。
- 多個變量修改的都是同一個數組對象中的數據。
-
如果某個數組變量中存儲的null,代表什么意思?需要注意什么?
-
代表這個數組變量沒有指向數組對象。
-
可以輸出這個變量,但是不能用這個數組變量去訪問數據或者訪問數組長度,會報空指針異常:NullPointerException。