1. 程式人生 > 其它 >Java基礎語法(四)

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),可以通過陣列的索引訪問到陣列中的元素。
    格式:陣列名[索引]
  • 陣列的長度屬性
    : 每個陣列都具有長度,而且是固定的,Java中賦予了陣列的一個屬性,可以獲取到陣列的長度,語句為: 陣列名.length ,屬性length的執行結果是陣列的長度,int型別結果。由次可以推斷出,陣列的最大索引值為 陣列名.length-1 。
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