內存的劃分:
1,寄存器。
2,本地方法區。
3,方法區。
4,棧內存。
存儲的都是局部變量。
而且變量所屬的作用域一旦結束,該變量就自動釋放。
5,堆內存。
存儲是數組和對象(其實數組就是對象) ,凡是new建立的都在堆中。
特點:
1)每一個實體都有首地址值。
2)堆內存中的每一個變量都有默認初始化值,根據類型的不同而不同。整數是0,小數0.0或者0.0f,boolean類型是false,char類型是 '\u0000',引用數據類型是NULL
3)垃圾回收機制。
全局變量和局部變量的區別:
局部變量是定義在方法內的變量,在其作用域結束時被釋放;
全局變量是定義在方法外的變量。
程序代碼運行時內存工作流程演示:
演示代碼:
1 class Demo2 2 { 3 public static void main(String[] args) 4 { 5 int[] arr = new int[3]; 6 arr[2] = 5; 7 System.out.print(arr[2]); 8 9 } 10 }
演示圖解:
文字說明:
1)在棧內存中為main函數開辟一個內存空間;
2)在main的內存空間為局部變量arr開辟一個內存空間;
3)在堆內存中開辟一個內存空間存放實體數組,數組自動初始化;
4)將堆內存中開辟的數組首地址傳給棧內存中的局部變量arr;
5)arr[2]的值修改;
6)控制台上打印arr[2]的值。
tips:
1)數組的確定必須明確其長度;
2)堆內存中的實體會自動初始化,而棧內存中不會,並且棧中未初始化會在編譯時報錯;
3)堆內存中開辟給數組的空間首地址傳給棧內存的數組名變量,數組名變量保存值為 [I@哈希值 ;( [ 表示引用指向數組,I 表示引用指向數組為int型,@之後是哈希值,通過哈希值計算得出引用在堆內存中的首地址)
數組代碼常見異常:
1)ArrayIndexOutOfBoundsException:(此異常在編譯時通過,在運行時報錯)
當訪問到數組中不存在的角標時,就會發生該異常。
2)NullPointerException:(此異常在編譯時通過,在運行時報錯)
當引用型變量沒有任何實體指向時,還在用其操作實體,就會發生該異常。