Java中的記憶體分配以及棧和堆的區別
阿新 • • 發佈:2018-11-06
-
Java中的記憶體分配以及棧和堆的區別
-
(1)棧: 存放的是區域性變數
區域性變數:在方法定義中或者方法宣告上的變數都是區域性變數。 -
(2)堆: 存放的是所有new出來的東西
特點:
a: 每一個new出來的東西都會為其分配一個地制值。
b: 每一個變數都有一個預設的值byte,short,int,long -- 0 float,double -- 0.0 char -- '\u0000' boolean -- false 引用資料型別 -- null
c: 使用完畢就變成了垃圾,等待垃圾回收器對其回收
-
(3)方法區:(面向物件部分講解)
-
(4)本地方法區:(和系統相關)
-
(5)暫存器:(cpu使用)
-
-
陣列的初始化靜態初始化及記憶體圖
(1)靜態初始化的格式:
格式:資料型別[] 陣列名 = new 資料型別[]{元素1,元素2,…};
舉例: int[] arr = new int[]{1,2,3};
簡化格式:
資料型別[] 陣列名 = {元素1,元素2,…};
舉例: int[] arr = {1,2,3};
(2)畫圖演示
a:定義一個數組,輸出陣列名稱和陣列中的元素值 -
陣列操作的兩個常見小問題越界和空指標
a:ArrayIndexOutOfBoundsException:陣列索引越界異常
原因:你訪問了不存在的索引。
b:NullPointerException:空指標異常
原因:陣列已經不在指向堆記憶體了。而你還用陣列名去訪問元素。 -
Java中的引數傳遞問題及圖解
A:案例演示
public static void main(String[] args) { int a = 10; int b = 20; System.out.println("a: " + a + ",b: " + b); change(a,b); System.out.println("a: " + a + ",b: " + b); int[] arr = {1,2,3,4,5}; change(arr); System.out.println(arr[1]); } public static void change(int a,int b) { System.out.println("a: " + a + ",b: " + b); a = b; b = a + b; System.out.println("a: " + a + ",b: " + b); } public static void change(int[] arr){ for(int x = 0 ; x < arr.length ; x++){ if(arr[x]%2 == 0){ arr[x] *= 2; } } }