1. 程式人生 > 資訊 >我國風雲衛星緊急馳援河南抗洪搶險,啟動高頻次連續觀測模式

我國風雲衛星緊急馳援河南抗洪搶險,啟動高頻次連續觀測模式

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的記憶體劃分

    1. 棧: 儲存區域性變數以及所有程式碼執行的.

    ​ 區域性變數: 指的是定義在方法中, 或者方法宣告上的變數.

    ​ 特點: 先進後出.

    1. 堆: 儲存所有new出來的內容(即: 物件).

    ​ 特點: 堆中的內容會在不確定的時間, 被GC回收.

    1. 方法區: 儲存位元組碼檔案的.

    ​ 位元組碼檔案: 指的是字尾名為.class的檔案.

    1. 本地方法區:

    ​ 和系統相關, 瞭解即可.

    1. 暫存器

      和CPU相關, 瞭解即可.

2.2 案例一: 一個數組記憶體圖

  • 略.

2.3 案例二: 兩個陣列記憶體圖

  • 略.

2.4 案例三: 兩個陣列指向同一個物件

  • 略.

3. 兩個小問題

  • 陣列是我們在實際開發中用到的比較多的容器, 在使用它的時候, 很可能會遇到如下的兩個問題:

    1. 陣列索引越界異常(ArrayIndexOutOfBoundsException)

    2. 空指標異常(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]);
        }
    }
}
餚核既盡,杯盤狼籍。相與枕藉乎舟中,不知東方之既白。