黑馬程序員入學blog ...
html
若是這章節很難懂的話應該返回去先看 JAVA_SE基礎——10.變量的做用域java
定義的位置上區別:2. 局部變量是沒有默認的初始值的,必需要先初始化才能使用。程序員
下面來看個例子:spa
//人類 class Person { String name; //成員變量 public void eat(){ int age ; age = 12; for(int i = 0 ; i< 5 ; i++){ System.out.println("hello world"+ age); } } } class Demo3 { public static void main(String[] args) { Person p1 = new Person(); p1.eat(); } }結果:
下面是內存中代碼的執行圖.net
首先內存整體分爲了五個部分,包括 stack segment(棧內存)、heap segmentheap segment(堆內存)、code segment(方法區)、data segment(靜態代碼塊)、運行時常量池(Runtime Constant Pool)是方法區的一部分。
其中咱們程序中用關鍵字new出來的東西都是存放在heap segment(堆內存)。
程序中的局部變量存放在stack segment(棧內存),這些局部變量是在具體方法執行結束以後,系統自動釋放內存資源(而heap segment中的資源須要java垃圾回收機制來處理)。
程序中的方法,是內存中的code segment(方法區)中的,並且是多個對象 共享一個代碼空間區域。
static靜態變量,須要放在內存中的data segment(靜態代碼塊)中。
code
運行時常量池,儲存常量。
htm
關於內存機制 ,等我弄懂些再發表文章。都怪我太菜對象