陣列定義和訪問
陣列概念
陣列概念: 陣列就是存盤多個資料的容器,陣列的長度固定,多個資料的資料型別要一致,
陣列的定義
方式一
陣列存盤的資料型別[] 陣列名字 = new 陣列存盤的資料型別[長度];
舉例: 定義可以存盤3個整數的陣列容器,代碼如下:
int[] arr = new int[3];
方式二
資料型別[] 陣列名 = new 資料型別[]{元素1,元素2,元素3…};
舉例: 定義存盤1,2,3,4,5整數的陣列容器,
int[] arr = new int[]{1,2,3,4,5};
方式三
資料型別[] 陣列名 = {元素1,元素2,元素3…};
舉例: 定義存盤1,2,3,4,5整數的陣列容器
int[] arr = {1,2,3,4,5};
陣列的訪問
直接輸出陣列名,顯示的是陣列的地址 [I@50cbc42f
索引: 每一個存盤到陣列的元素,都會自動的擁有一個編號,從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 class Demo{
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr); // [I@50cbc42f
arr[1] = 2;
System.out.println(arr[1]);
}
}
[I@50cbc42f是陣列在記憶體中的地址,new出來的內容,都是在堆記憶體中存盤的,而方法中的變數arr保存的是陣列的地址, 輸出arr[0],就會輸出arr保存的記憶體地址中陣列中0索引上的元素

兩個陣列記憶體圖
public static void main(String[] args) {
int[] arr1 = new int[2];
int[] arr2 = new int[3];
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
// 給arr1陣列的索引為0元素賦值100
arr1[0] = 100;
// 給arr2陣列的索引為0元素賦值200
arr2[0] = 200;
System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}

兩個變數指向一個陣列
public static void main(String[] args) {
int[] arr = new int[3];
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
// 定義陣列變數arr2,將arr的地址賦值給arr2
// arr和arr2指向堆中同一個陣列
int[] arr2 = arr;
arr2[0] = 111;
arr2[1] = 222;
arr2[2] = 333;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}

陣列的常見操作
陣列越界例外
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println(arr[3]);
}
創建陣列,賦值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 = {11, 22, 33, 44};
// 將陣列中的每個元素都取出來
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
陣列獲取最大值元素
public static void main(String[] args) {
int[] arr = {2, 16, 1000, 10000, 500, 3000};
// 1.定義變數記錄較大的值,先假定arr[0]是最大值
int max = arr[0];
// 2.遍歷拿到陣列中的每個元素
for (int i = 0; i < arr.length; i++) {
// 3.如果arr[i]大于max,將max改成arrr[i]
if (arr[i] > max) {
// 10000
max = arr[i];
}
}
// 4.輸出最大值
System.out.println(max);
}
陣列反轉

public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
// 定義變數記錄小索引: start = 0
// 定義變數記錄大索引: end = arr.length ‐ 1
// 回圈終止條件: start < end 才需要交換位置
for (int start = 0, end = arr.length ‐ 1; start < end; start++, end‐‐) {
// 回圈交換位置,利用第三方變數
int tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
陣列作為方法引數和回傳值
陣列作為方法引數
陣列作為方法引數傳遞,傳遞的引數是陣列記憶體的地址,
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
System.out.println("1位置: " + arr);
printArray(arr); // 陣列作為方法引數傳遞,傳遞的引數是陣列記憶體的地址
}
public static void printArray(int[] arr) {
System.out.println("2位置: " + arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}

陣列作為方法回傳值
陣列作為方法的回傳值,回傳的是陣列的記憶體地址
public static void main(String[] args) {
//呼叫方法,接收陣列的回傳值
//接收到的是陣列的記憶體地址
int[] arr = getArr();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/*
創建方法,回傳值是陣列型別
return回傳陣列的地址
*/
public static int[] getArr() {
int[] arr = { 12, 54, 32 };
//回傳陣列的地址,回傳到呼叫者
return arr;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/136622.html
標籤:Java
