我國風雲衛星緊急馳援河南抗洪搶險,啟動高頻次連續觀測模式
阿新 • • 發佈:2021-07-21
Java陣列基礎
1. 陣列簡介
1.1 概述
- 陣列就是用來儲存多個同類型元素的容器.
- 例如: 儲存5個整數, 或者儲存10個小數, 亦或者儲存3個字串等.
1.2 格式
動態初始化: 我們給定長度, 由系統給出預設初始化值. //格式一 //資料型別[] 陣列名 = new 資料型別[長度]; //格式二 //資料型別 陣列名[] = new 資料型別[長度]; //解釋: 上述兩種定義方式只是寫法不同, 並無其他區別. 靜態初始化: 我們給定初始化值, 由系統指定長度. //格式一 //資料型別[] 陣列名 = new 資料型別[]{元素1, 元素2, 元素3}; //這裡可以有多個元素. //格式二 語法糖. //資料型別[] 陣列名 = {元素1, 元素2, 元素3}; //解釋: 上述兩種定義方式只是寫法不同, 並無其他區別.
1.3 示例: 定義陣列
需求 1. 建立int型別的陣列, 用來儲存3個元素. 2. 建立int型別的陣列, 儲存資料11, 22, 33. 參考程式碼 public class ArrayDemo { public static void main(String[] args) { //1. 建立int型別的陣列, 用來儲存3個元素. //我們制定長度, 由系統給出預設值. //格式一: int[] arr1 = new int[3]; //推薦. //格式二: int arr2[] = new int[3]; //2. 建立int型別的陣列, 儲存資料`11, 22, 33`. //我們直接傳入元素, 由系統指定長度. //格式1 int[] arr3 = new int[]{11, 22, 33}; //推薦. //格式2 int[] arr4 = {11, 22, 33}; } }
1.4 陣列各部分解釋
此處以動態初始化舉例:
資料型別[] 陣列名 = new 資料型別[長度];
//例如:
int[] arr = new int[3];
解釋:
資料型別: 指的是陣列中儲存元素的資料型別.
例如: 如果是int, 說明陣列中只能儲存int型別的資料, 如果是String, 則說明陣列中只能儲存字串.
[]: 表示是一個數組.
陣列名: 類似於之前定義的變數名, 要符合命名規範, 我們可以通過陣列名來運算元組.
new: 它是一個關鍵字, 表示用來建立陣列物件的.
1.5 陣列的特點及基本用法
特點: 1. 陣列中的每個元素都是有編號的, 且編號是從0開始的. 可以方便我們快速運算元組中的元素. 解釋: 編號也叫索引(這個是最常見的念法), 下標, 角標. index 2. 陣列中每個元素都有預設值. 例如: 1. int型別陣列, 元素預設值是: 0 2. double型別的陣列, 元素預設值是: 0.0 3. boolean型別的陣列, 元素預設值是: false 4. String型別的陣列, 元素預設值是: null 基本用法 1. 通過陣列名[索引]的形式, 可以快速獲取陣列中的指定元素. //格式 陣列名[索引] //例如: int[] arr = {11, 22, 33}; System.out.println(arr[0]); //列印結果是: 11 2. 通過陣列名[索引] = 值;的方式, 可以修改陣列中的指定元素值. //格式 陣列名[索引] = 值; //例如: int[] arr = {11, 22, 33}; System.out.println(arr[1]); //列印結果是: 22 arr[1] = 222; System.out.println(arr[1]); //列印結果是: 222 3. 通過陣列名.length的方式, 可以獲取陣列的長度. //格式 陣列名.length //例如: int[] arr = {11, 22, 33}; System.out.println(arr.length); //列印結果是: 3
2. 陣列的記憶體圖
2.1 記憶體解釋
-
記憶體是計算機中的重要原件,也是臨時儲存區域,作用是執行程式。我們編寫的程式是存放在硬碟中的,在硬碟中的程式是不會執行的,必須放進記憶體中才能執行,執行完畢後會清空記憶體。
即: Java虛擬機器要執行程式,必須要對記憶體進行空間的分配和管理。為了提高運算效率,就對空間進行了不同區域的劃分,因為每一片區域都有特定的處理資料方式和記憶體管理方式。
JVM的記憶體劃分
- 棧: 儲存區域性變數以及所有程式碼執行的.
區域性變數: 指的是定義在方法中, 或者方法宣告上的變數.
特點: 先進後出.
- 堆: 儲存所有new出來的內容(即: 物件).
特點: 堆中的內容會在不確定的時間, 被GC回收.
- 方法區: 儲存位元組碼檔案的.
位元組碼檔案: 指的是字尾名為.class的檔案.
- 本地方法區:
和系統相關, 瞭解即可.
-
暫存器
和CPU相關, 瞭解即可.
2.2 案例一: 一個數組記憶體圖
- 略.
2.3 案例二: 兩個陣列記憶體圖
- 略.
2.4 案例三: 兩個陣列指向同一個物件
- 略.
3. 兩個小問題
-
陣列是我們在實際開發中用到的比較多的容器, 在使用它的時候, 很可能會遇到如下的兩個問題:
-
陣列索引越界異常(ArrayIndexOutOfBoundsException)
-
空指標異常(NullPointerException)
-
3.1 陣列索引越界異常
-
產生原因
訪問了陣列中不存在的索引.
解決方案
訪問陣列中存在的索引即可.
3.2 空指標異常
-
產生原因
訪問了空物件. 即: 物件為空, 你還去呼叫它的一些方法, 肯定不行.
解決方案
對物件賦具體的值即可.
4. 陣列的常見操作
4.1 遍歷陣列
需求:
1. 定義int型別的陣列arr, 儲存元素11, 22, 33, 44, 55.
2. 通過for迴圈, 遍歷陣列.
參考程式碼
public class Array01 {
public static void main(String[] args) {
//1. 定義int型別的陣列arr, 儲存元素11, 22, 33, 44, 55.
int[] arr = {11, 22, 33, 44, 55};
//2. 通過for迴圈, 遍歷陣列.
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
4.2 獲取陣列的最大值
需求:
求陣列int[] arr = {5, 15, 2000, 10000, 100, 4000}的最大值.
參考程式碼
public class Array02 {
public static void main(String[] args) {
//求陣列int[] arr = {5, 15, 2000, 10000, 100, 4000}的最大值.
int[] arr = {5, 15, 2000, 10000, 100, 4000};
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (max < arr[i])
max = arr[i];
}
System.out.println("陣列的最大值為:" + max);
}
}
4.3 反轉陣列
需求
1. 定義int型別的陣列, 儲存資料: 11, 33, 22, 55, 44.
2. 反轉陣列, 並列印反轉後的結果.
參考程式碼
public class Array03 {
public static void main(String[] args) {
//需求
//1. 定義int型別的陣列, 儲存資料: 11, 33, 22, 55, 44.
//2. 反轉陣列, 並列印反轉後的結果.
int[] arr = {11, 33, 22, 55, 44};
for (int i = 0; i < arr.length / 2 ; i++) {
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
for (int i = 0; i < arr.length ; i++) {
System.out.println(arr[i]);
}
}
}
餚核既盡,杯盤狼籍。相與枕藉乎舟中,不知東方之既白。