一、局部變量
方法中的局部變量存在於棧內存。每當程序調用一個方法時,系統都會為該方法建立一個方法棧,其所在方法中聲明的變量就放在方法棧中,當方法結束系統會釋放方法棧,其對應在該方法中聲明的變量隨着棧的銷毀而結束,這就局部變量只能在方法中有效的原因。
二、成員變量
對象實例的引用存儲在棧內存中,對象實例存儲在堆內存中。所以,對象中聲明的成員變量存儲在堆中。(成員變量不會隨着某個方法執行結束而銷毀)
三、靜態變量
類中的靜態變量(被 static 關鍵字修飾)存放在 Java 內存區域的方法區。方法區與 Java 堆一樣,是各個線程共享的內存區域,它用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。雖然Java 虛擬機規范把方法區描述為堆的一個邏輯部分,但是它卻有一個別名叫做 Non-Heap(非堆),目的應該是與 Java 堆區分開來。