java语言中,类的成员变量分配在哪个内存区?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java语言中,类的成员变量分配在哪个内存区?相关的知识,希望对你有一定的参考价值。

成员变量有静态和非静态,静态成员变量是共享数据,在共享区中,也叫方法区中。
非静态成员变量在堆内存中,作用于整个类中。
而局部变量在栈内存中,定义在函数中,函数结束内存释放。
参考技术A 非静态的成员变量在堆上追问

局部变量和非静态的成员变量都在堆上吗?在main函数在执行时,好像都是局部变量在堆内存中被分配空间啊,不理解成员变量怎么分配的···

追答

局部变量如果是基础类型,则在栈上,如果是引用类型,则引用被存在栈上,引用指向的对象是在堆上的

本回答被提问者采纳
参考技术B 成员变量在堆内存中 参考技术C 变量在栈...实例在堆。。

Java类的实例化对象成员在内存空间怎么分配,调用构造函数又是在内存中怎么分配

class Country
String name;

void value()
name = "China";



class City extends Country
String name;

void value()
name = "Hefei";
super.value();//不调用此方法时,super.name返回的是父类的成员变量的值null
System.out.println(name);
System.out.println(super.name);


publicstaticvoid main(String[] args)
City c=new City();
c.value();


这段程序在内存是怎么分配的,子类继承父类,子类和父类在内存怎么分配,有什么联系。定义类但没有实例对象此时有没为类分配内存?如果类实例化对象,对象在内存怎么分配?与static又有什么关系?
希望可以解答地比较清楚.

参考技术A 我觉得这个问题直接百度去找应该有更专业的回答,因为想搞清楚java对象怎么分配不是一言两语可以说清楚的,这涉及到java对象怎么回收问题。
子类实例化前必须先实例化父类,因为子类需要父类的基础
如果没有实例化对象,也没有访问静态字段或者静态方法那么也没有分配,类的信息是保存在栈中的,对象的创建是在堆中的
对象独占内存空间,static说明资源共享,也就是只占一份内存本回答被提问者和网友采纳

以上是关于java语言中,类的成员变量分配在哪个内存区?的主要内容,如果未能解决你的问题,请参考以下文章

类成员函数中定义的的static变量的内存是怎么分配的?

java final .static修饰符

类成员变量在哪里分配

请问java里给成员变量赋值,那成员变量会在哪个内存空间里

java中,静态方法被调用是,存储在内存的哪个区域?是栈?还是放大区?还是两者都有?

Java类的实例化对象成员在内存空间怎么分配,调用构造函数又是在内存中怎么分配