Java學習——陣列的相關知識
一、陣列概述和定義格式說明
對於需要多個變數的問題,一個一個儲存太佔用記憶體和程式碼量,所以我們可以使用陣列,簡單來說,陣列就是可以儲存多個同一資料型別的容器。
陣列既可以儲存基本資料型別,也可以儲存引用資料型別。
陣列定義格式:
格式1: 資料型別[] 陣列名;
格式2: 資料型別 陣列名[];
舉例:
int[] a; 定義了一個int型別的陣列a;
int a[]; 定義了一個int型別的a陣列;
推薦使用第一種定義方式。
二、陣列的初始化
1.Java中的陣列必須先初始化,然後才能使用。
所謂初始化:就是為陣列中的陣列元素分配記憶體空間,併為每個陣列元素賦值。
2.初始化分為靜態初始化和動態初始化:
靜態初始化:給出初始化值,由系統決定長度
動態初始化:只指定長度,由系統給出初始化值
需要注意的是,這兩種初始化只可以選擇一種,不可以動靜結合。
3.動態初始化的格式:
資料型別[] 陣列名 = new 資料型別[陣列長度];
陣列長度其實就是陣列中元素的個數。
舉例: int[] arr = new int[3]; 定義了一個int型別的陣列arr,這個陣列可以存放3個int型別的值。
三、Java中的記憶體分配
1.棧:存放的是區域性變數
區域性變數:定義在方法中的變數,或者方法宣告上的變數,區域性變數存在棧記憶體。
2.堆:存放的是所有new(建立物件)出來的東西。
存放在堆裡面的變數的特點:
a.每一個new(建立物件)的東西都會為其分配一個地址值;
b.每一個變數都有其預設值:
引用資料型別 null
byte short int long 0
float double 0.0
boolean false
char ‘\u0000’
c.使用完畢就成了垃圾,等待垃圾回收器回收
3.方法區(比如main方法)
4.本地方法區
5.暫存器:(cpu使用)
四、陣列操作的兩個常見小問題越界和空指標
a:ArrayIndexOutOfBoundsException:陣列索引越界異常
原因:你訪問了不存在的索引。
b:NullPointerException:空指標異常
原因:陣列已經不在指向堆記憶體了。而你還用陣列名去訪問元素。
五、陣列的學習
談到陣列的學習,我個人最大的感受是一定要對記憶體分配這塊知識掌握,只有掌握了java記憶體分配才會清晰每個陣列以及元素的變化。