Java基礎語法(四)
這是我的Java語法自學整理的第四部分。
這部分主要講了IDEA常用快捷鍵、陣列的相關基礎知識。
DEA常用快捷鍵
快捷鍵 | 功能 |
---|---|
Alt+Enter | 匯入包,自動修正程式碼 |
Ctrl+Y | 刪除游標所在行 |
Ctrl+D | 複製游標所在行的內容,插入游標位置下面 |
Ctrl+Alt+L | 格式化程式碼 |
Ctrl+/ | 單行註釋 |
Ctrl+Shift+/ | 選中程式碼註釋,多行註釋,再按取消註釋 |
Alt+Ins | 自動生成程式碼,toString,get,set等方法 |
Alt+Shift+上下箭頭 | 移動當前程式碼行 |
陣列定義和訪問
容器概念
容器:是將多個數據儲存到一起,每個資料稱為該容器的元素。
陣列概念
陣列: 陣列就是儲存資料長度固定的容器,保證多個數據的資料型別要一致
陣列的定義
方式一
- 格式:
陣列儲存的資料型別[] 陣列名字 = new 陣列儲存的資料型別[長度];
例子:int[] arr = new int[3];
- 陣列定義格式詳解:
- 陣列儲存的資料型別: 建立的陣列容器可以儲存什麼資料型別。
[ ]
: 表示陣列。- 陣列名字:為定義的陣列起個變數名,滿足識別符號規範,可以使用名字運算元組。
- new:關鍵字,建立陣列使用的關鍵字。
- 陣列儲存的資料型別: 建立的陣列容器可以儲存什麼資料型別。
- [長度]:陣列的長度,表示陣列容器中可以儲存多少個元素。
- 注意:陣列有定長特性,長度一旦指定,不可更改。
- 和水杯道理相同,買了一個2升的水杯,總容量就是2升,不能多也不能少。
方式二
- 格式:
資料型別[] 陣列名 = new 資料型別[]{元素1,元素2,元素3...};
例子:int[] arr = new int[]{1,2,3,4,5};
方式三
- 格式:
資料型別[] 陣列名 = {元素1,元素2,元素3...};
例子:int[] arr = {1,2,3,4,5};
陣列的訪問
- 索引: 每一個儲存到陣列的元素,都會自動的擁有一個編號,從0開始,這個自動編號稱為陣列索引(index),可以通過陣列的索引訪問到陣列中的元素。
格式:陣列名[索引]
- 陣列的長度屬性
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5};
//列印陣列的屬性,輸出結果是5
System.out.println(arr.length);
}
- 索引訪問陣列中的元素:
- 陣列名[索引]=數值,為陣列中的元素賦值
- 變數=陣列名[索引],獲取出陣列中的元素
陣列原理記憶體圖
記憶體概述
記憶體是計算機中的重要原件,臨時儲存區域,作用是執行程式。我們編寫的程式是存放在硬碟中的,在硬碟中的程式是不會執行的,必須放進記憶體中才能執行,執行完畢後會清空記憶體。
Java虛擬機器要執行程式,必須要對記憶體進行空間的分配和管理。
Java虛擬機器的記憶體劃分
為了提高運算效率,就對空間進行了不同區域的劃分,因為每一片區域都有特定的處理資料方式和記憶體管理方式。
-
JVM的記憶體劃分:
區域名稱 作用 暫存器 給CPU使用,和我們開發無關。 本地方法棧 JVM在使用作業系統功能的時候使用,和我們開發無關。 方法區 儲存可以執行的class檔案。 堆記憶體 儲存物件或者陣列,new來建立的,都儲存在堆記憶體。 方法棧 方法執行時使用的記憶體,比如main方法執行,進入方法棧中執行
陣列在記憶體中的儲存
一個數組記憶體圖
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);//[I@5f150435
}
以上方法執行,輸出的結果是[I@5f150435,這個是什麼呢?是陣列在記憶體中的地址。new出來的內容,都是在堆記憶體中儲存的,而方法中的變數arr儲存的是陣列的地址。
輸出arr[0],就會輸出arr儲存的記憶體地址中陣列中0索引上的元素 。
陣列的常見操作
陣列越界異常
建立陣列,賦值3個元素,陣列的索引就是0,1,2,沒有3索引,因此我們不能訪問陣列中不存在的索引,程式執行後,將會丟擲 ArrayIndexOutOfBoundsException
陣列越界異常。在開發中,陣列的越界異常是不能出現的,一旦出現了,就必須要修改我們編寫的程式碼。
陣列空指標異常
public static void main(String[] args) {
int[] arr = {1,2,3};
arr = null;
System.out.println(arr[0]);
}
arr = null 這行程式碼,意味著變數arr將不會在儲存陣列的記憶體地址,也就不允許再運算元組了,因此執行的時候會丟擲 NullPointerException
空指標異常。在開發中,陣列空指標異常是不能出現的,一旦出現了,就必須要修改我們編寫的程式碼。
陣列遍歷
- 陣列遍歷: 就是將陣列中的每個元素分別獲取出來,就是遍歷。遍歷也是陣列操作中的基石。
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
陣列獲取最大值元素
- 最大值獲取:從陣列的所有元素中找出最大值。
- 實現思路:
- 定義變數,儲存陣列0索引上的元素
- 遍歷陣列,獲取出陣列中的每個元素
- 將遍歷到的元素和儲存陣列0索引上值的變數進行比較
- 如果陣列元素的值大於了變數的值,變數記錄住新的值陣列迴圈遍歷結束,變數儲存的就是陣列中的最大值
public static void main(String[] args) {
int[] arr = { 5, 15, 2000, 10000, 100, 4000 };
//定義變數,儲存陣列中0索引的元素
int max = arr[0];
//遍歷陣列,取出每個元素
for (int i = 0; i < arr.length; i++) {
//遍歷到的元素和變數max比較
//如果陣列元素大於max
if (arr[i] > max) {
//max記錄住大值
max = arr[i];
}
}
System.out.println("陣列最大值是: " + max);
}
陣列反轉
-
陣列的反轉: 陣列中的元素顛倒順序,例如原始陣列為1,2,3,4,5,反轉後的陣列為5,4,3,2,1
-
實現思想:陣列最遠端的元素互換位置。
- 實現反轉,就需要將陣列最遠端元素位置交換
- 定義兩個變數,儲存陣列的最小索引和最大索引
- 兩個索引上的元素交換位置
- 最小索引++,最大索引--,再次交換位置
- 最小索引超過了最大索引,陣列反轉操作結束
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
/*
迴圈中定義變數min=0最小索引
max=arr.length‐1最大索引
min++,max‐‐
*/
for (int min = 0, max = arr.length ‐ 1; min <= max; min++, max‐‐) {
//利用第三方變數完成陣列中的元素交換
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
} /
/ 反轉後,遍歷陣列
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
陣列作為方法引數和返回值
陣列作為方法引數
- 陣列作為方法引數傳遞,傳遞的引數是陣列記憶體的地址。
public static void main(String[] args) {
int[] arr = { 1, 3, 5, 7, 9 };
//呼叫方法,傳遞陣列
printArray(arr);
}
/*
建立方法,方法接收陣列型別的引數
進行陣列的遍歷
*/
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
陣列作為方法返回值
- 陣列作為方法的返回值,返回的是陣列的記憶體地址
public static void main(String[] args) {
//呼叫方法,接收陣列的返回值
//接收到的是陣列的記憶體地址
int[] arr = getArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/*
建立方法,返回值是陣列型別
return返回陣列的地址
*/
public static int[] getArray() {
int[] arr = { 1, 3, 5, 7, 9 };
//返回陣列的地址,返回到呼叫者
return arr;
}
本文來自部落格園,作者:星空下的呢喃,轉載請註明原文連結:https://www.cnblogs.com/linanspace/p/15768590.html