java基礎總結四(陣列、switch語句)
5.陣列執行期報錯
在使用陣列時,因為不當的操作,我們可能會通過編譯,但是在執行期間遇到一些程式報錯類似這樣編譯時不報錯,執行期報錯的錯誤叫執行時錯誤
陣列最常見的兩個執行時錯誤:空指標異常和陣列索引越界異常
5.1 空指標異常
程式語言中對空的處理與我們平常所理解的略有不同。這裡我們區分兩種空的不同
變數完全沒有值:
定義了變數根本沒有值:int a; int[] b
這樣根本沒有賦值過的變數是無法使用的。陣列也是一種資料型別,可以指定變數,沒有賦值是不能使用的。
變數有值,但值為null:
定義了變數並且賦值了,但是值是空值,是常量。這種情況只針對於引用資料型別,基本資料型別不成立。
int a = null; 編譯失敗
int[] arr = null; 正常賦值
當使用int[] arr = null給arr賦值時,變數arr作為陣列名通過編號訪問陣列元素時編譯不報錯,執行時報執行錯誤NullPointerException空指標異常
5.2 陣列索引越界異常
當陣列中不存在該索引卻訪問該索引時,執行時報錯:
ArrayIndexOutOfBoundsException 陣列索引越界
6. 陣列的記憶體解釋
6.1 記憶體分割槽
記憶體是計算機臨時儲存資料的區域,我們會將記憶體在邏輯上分配成不同區域方便對資料進行分類高效管理。
• 暫存器:最快的儲存區域直接與CPU打交道,是程式設計師無法控制的計算區域。
• 堆疊:又叫棧,僅次於暫存器。用於儲存區域性變數。
• 堆:通用記憶體池,用於存放所有引用資料型別物件。每個物件均有地址,且有預設初始化值。
• 常量儲存區域:用於存放永遠不會被改變的值。
6.2 引用資料型別陣列的記憶體圖
陣列是我們系統介紹的第一個引用資料型別,瞭解記憶體結構將有助於後期整個面向物件的學習。
int[] x = new int[100];
• 引用變數:陣列屬於引用資料型別,引用資料型別定義的變數x儲存在棧記憶體當中,這個x變數叫做這個陣列例項的引用變數。
• =:與數學當中的意義不同,是賦值的意思,並非相等。
• 真正的陣列例項是通過new關鍵字創建出來,儲存於堆記憶體中,併產生一個十六進位制表示的記憶體地址
• 這個引用變數會指向這個陣列的記憶體地址
則引用變數的值是這個陣列例項的地址值,引用變數通過地址可以表示這個陣列物件