① 在Java JVM里,如果一个变量被声明为final或者static, 那么这个变量的引用以及它的值被存放在哪
static不能用在方法里面,只能修饰类的属性或者方法。
static修饰的变量被放在方法区,因为它属于类变量,是类的一部分。
所有的方法中的普通变量都是在栈中的局部变量表中的,如果是引用类型的变量局部变量表会存放引用对象的地址,这个引用对象实际存储在堆中。如果被final修饰的话代表这个引用类型的变量指向的地址无法被改变。所以final修饰的引用的地址和final修饰的基本数据类型都会放在常量池,常量池位于方法区中。
② Java方法区和堆分别储存什么
静态变量、常量在方法区,所有方法,包括静态和非静态的,也在方法区。堆储存对象、数组、非静态变量。
③ JAVA中的类成员变量是存在堆还是栈里面呀
类的成员变量都在堆上,只有方法里面定义的基础变量,在方法里面定义的引用
其他对象的引用放在栈上(这个时候被引用的对象和它的成员变量还是在堆上)
也就是说,线程上下文的东西在栈上,其他统统在堆上。