應用程式程序是如何啟動的?
1.陣列
1.1什麼是陣列【理解】
陣列就是儲存資料長度固定的容器,儲存多個數據的資料型別要一致。
1.2陣列定義格式【記憶】
1.2.1第一種
資料型別[] 陣列名
示例:
int[] arr;
double[] arr;
char[] arr;
1.2.2第二種
資料型別 陣列名[]
示例:
int arr[];
double arr[];
char arr[];
1.3陣列動態初始化【應用】
1.3.1什麼是動態初始化
陣列動態初始化就是隻給定陣列的長度,由系統給出預設初始化值
1.3.2動態初始化格式
資料型別[] 陣列名 = new 資料型別[陣列長度];
int[] arr = new int[3];
1.3.3動態初始化格式詳解
- 等號左邊:
- int:陣列的資料型別
- []:代表這是一個數組
- arr:代表陣列的名稱
- 等號右邊:
- new:為陣列開闢記憶體空間
- int:陣列的資料型別
- []:代表這是一個數組
- 5:代表陣列的長度
1.4陣列元素訪問【應用】
1.4.1什麼是索引
每一個儲存到陣列的元素,都會自動的擁有一個編號,從0開始。
這個自動編號稱為陣列索引(index),可以通過陣列的索引訪問到陣列中的元素。
1.4.2訪問陣列元素格式
陣列名[索引];
1.4.3示例程式碼
public class ArrayDemo { public static void main(String[] args) { int[] arr = new int[3]; //輸出陣列名 System.out.println(arr); //[I@880ec60 //輸出陣列中的元素 System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); } }
1.5記憶體分配【理解】
1.5.1記憶體概述
記憶體是計算機中的重要原件,臨時儲存區域,作用是執行程式。
我們編寫的程式是存放在硬碟中的,在硬碟中的程式是不會執行的。
必須放進記憶體中才能執行,執行完畢後會清空記憶體。
Java虛擬機器要執行程式,必須要對記憶體進行空間的分配和管理。
1.5.2java中的記憶體分配
- 目前我們只需要記住兩個記憶體,分別是:棧記憶體和堆記憶體
區域名稱 | 作用 |
---|---|
暫存器 | 給CPU使用,和我們開發無關。 |
本地方法棧 | JVM在使用作業系統功能的時候使用,和我們開發無關。 |
方法區 | 儲存可以執行的class檔案。 |
堆記憶體 | 儲存物件或者陣列,new來建立的,都儲存在堆記憶體。 |
方法棧 | 方法執行時使用的記憶體,比如main方法執行,進入方法棧中執行。 |
1.6單個數組的記憶體圖【理解】
1.7多個數組的記憶體圖【理解】
1.8多個數組指向相同記憶體圖【理解】
1.9陣列靜態初始化【應用】
1.9.1什麼是靜態初始化
在建立陣列時,直接將元素確定
1.9.2靜態初始化格式
-
完整版格式
資料型別[] 陣列名 = new 資料型別[]{元素1,元素2,...};
-
簡化版格式
資料型別[] 陣列名 = {元素1,元素2,...};
1.9.3示例程式碼
public class ArrayDemo {
public static void main(String[] args) {
//定義陣列
int[] arr = {1, 2, 3};
//輸出陣列名
System.out.println(arr);
//輸出陣列中的元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
1.10陣列操作的兩個常見小問題【應用】
1.10.1索引越界異常
-
出現原因
public class ArrayDemo { public static void main(String[] args) { int[] arr = new int[3]; System.out.println(arr[3]); } }
陣列長度為3,索引範圍是0~2,但是我們卻訪問了一個3的索引。
程式執行後,將會丟擲ArrayIndexOutOfBoundsException 陣列越界異常。在開發中,陣列的越界異常是不能出現的,一旦出現了,就必須要修改我們編寫的程式碼。
-
解決方案
將錯誤的索引修改為正確的索引範圍即可!
1.10.2空指標異常
-
出現原因
public class ArrayDemo { public static void main(String[] args) { int[] arr = new int[3]; //把null賦值給陣列 arr = null; System.out.println(arr[0]); } }
arr = null 這行程式碼,意味著變數arr將不會在儲存陣列的記憶體地址,也就不允許再運算元組了,因此執行的時候會丟擲 NullPointerException 空指標異常。在開發中,陣列的越界異常是不能出現的,一旦出現了,就必須要修改我們編寫的程式碼。
-
解決方案
給陣列一個真正的堆記憶體空間引用即可!
1.11陣列遍歷【應用】
-
陣列遍歷:就是將陣列中的每個元素分別獲取出來,就是遍歷。遍歷也是陣列操作中的基石。
public class ArrayTest01 { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5 }; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr[3]); System.out.println(arr[4]); } }
以上程式碼是可以將陣列中每個元素全部遍歷出來,但是如果陣列元素非常多,這種寫法肯定不行,因此我們需要改造成迴圈的寫法。陣列的索引是 0 到 lenght-1 ,可以作為迴圈的條件出現。
public class ArrayTest01 { public static void main(String[] args) { //定義陣列 int[] arr = {11, 22, 33, 44, 55}; //使用通用的遍歷格式 for(int x=0; x<arr.length; x++) { System.out.println(arr[x]); } } }
1.12陣列最值【應用】
-
最大值獲取:從陣列的所有元素中找出最大值。
-
實現思路:
- 定義變數,儲存陣列0索引上的元素
- 遍歷陣列,獲取出陣列中的每個元素
- 將遍歷到的元素和儲存陣列0索引上值的變數進行比較
- 如果陣列元素的值大於了變數的值,變數記錄住新的值
- 陣列迴圈遍歷結束,變數儲存的就是陣列中的最大值
-
程式碼實現:
public class ArrayTest02 { public static void main(String[] args) { //定義陣列 int[] arr = {12, 45, 98, 73, 60}; //定義一個變數,用於儲存最大值 //取陣列中第一個資料作為變數的初始值 int max = arr[0]; //與陣列中剩餘的資料逐個比對,每次比對將最大值儲存到變數中 for(int x=1; x<arr.length; x++) { if(arr[x] > max) { max = arr[x]; } } //迴圈結束後列印變數的值 System.out.println("max:" + max); } }