① 在Java JVM里,如果一個變數被聲明為final或者static, 那麼這個變數的引用以及它的值被存放在哪
static不能用在方法裡面,只能修飾類的屬性或者方法。
static修飾的變數被放在方法區,因為它屬於類變數,是類的一部分。
所有的方法中的普通變數都是在棧中的局部變數表中的,如果是引用類型的變數局部變數表會存放引用對象的地址,這個引用對象實際存儲在堆中。如果被final修飾的話代表這個引用類型的變數指向的地址無法被改變。所以final修飾的引用的地址和final修飾的基本數據類型都會放在常量池,常量池位於方法區中。
② Java方法區和堆分別儲存什麼
靜態變數、常量在方法區,所有方法,包括靜態和非靜態的,也在方法區。堆儲存對象、數組、非靜態變數。
③ JAVA中的類成員變數是存在堆還是棧裡面呀
類的成員變數都在堆上,只有方法裡面定義的基礎變數,在方法裡面定義的引用
其他對象的引用放在棧上(這個時候被引用的對象和它的成員變數還是在堆上)
也就是說,線程上下文的東西在棧上,其他統統在堆上。