黑马程序员技术交流社区

标题: 成员变量 [打印本页]

作者: 黄伟财    时间: 2013-12-20 16:38
标题: 成员变量
如果对象还没存在,那么类中的成员变量保存在哪里呢,是在栈中保存吗?
作者: litaojisuanji    时间: 2013-12-20 16:52
类中的成员变量,
如果是静态的:
      随着类的加载而加载,存放在方法区中的静态区
如果不是静态的:
     对象还没存在,那么成员变量也不存在,如果对象存在了,就存放在堆内存中,对象也是存放在堆内存中的。
作者: 黄伟财    时间: 2013-12-20 17:00
litaojisuanji 发表于 2013-12-20 16:52
类中的成员变量,
如果是静态的:
      随着类的加载而加载,存放在方法区中的静态区

如果对象还没存在,而此时我在类中初始化了实力变量,那么结果会在堆中分配内存吗?还是会在栈内存中分配空间
作者: litaojisuanji    时间: 2013-12-20 17:04
黄伟财 发表于 2013-12-20 17:00
如果对象还没存在,而此时我在类中初始化了实力变量,那么结果会在堆中分配内存吗?还是会在栈内存中分配 ...

初始化了实力变量?
作者: 黄伟财    时间: 2013-12-20 17:20
litaojisuanji 发表于 2013-12-20 17:04
初始化了实力变量?

理解就行了嘛,是实例变量
作者: litaojisuanji    时间: 2013-12-20 17:34
黄伟财 发表于 2013-12-20 17:20
理解就行了嘛,是实例变量

既然你都说实例了,那就是通过new 创建对象了,那就在堆里。。。。
作者: 黄伟财    时间: 2013-12-20 18:02
litaojisuanji 发表于 2013-12-20 17:34
既然你都说实例了,那就是通过new 创建对象了,那就在堆里。。。。

我明白了,可是和你的理解不同,我认为,例如 int a=0这样初始化了变量,但是没有创建对象,它是在栈中的,另一种情况是有了对象后,在堆中有a的初始化a=1,为了操作这个对象,会在栈中分配内存空间的。
作者: litaojisuanji    时间: 2013-12-20 18:08
黄伟财 发表于 2013-12-20 18:02
我明白了,可是和你的理解不同,我认为,例如 int a=0这样初始化了变量,但是没有创建对象,它是在栈中的 ...

栈中存放的是局部变量,是当方法被调用时,方法从方法区中调入栈中执行,
在栈中执行时,方法中的变量才在栈中开辟空间存放,方法结束,这些局部
变量也就消失了。
作者: 杨道红    时间: 2013-12-20 19:16
本帖最后由 杨道红 于 2013-12-20 19:17 编辑

分两种情况。1静态变量,存储在方法区的静态区。2 不是静态,既然对象没建立,成员变量肯定也不存在。如果来了个new,则在堆里面。

作者: 城市儒侠    时间: 2013-12-20 19:26
你好,成员变量分为两种:静态成员变量和非静态成员变量。
静态变量在类加载的时候就已经创建了。并存放在方法区。静态变量只初始化一次。
而非静态成员变量是在你new一个类的时候才产生。存放在堆内存里面。
但是如果你不建立对象,那么就没有非静态成员变量。

这是我总结的,希望对你有帮助。

作者: 周志    时间: 2013-12-20 20:36
黄伟财 发表于 2013-12-20 18:02
我明白了,可是和你的理解不同,我认为,例如 int a=0这样初始化了变量,但是没有创建对象,它是在栈中的 ...

int a=0 实际是初始化了 1.5版本有自动装箱和拆箱  实际就相当于这样写 Integer a=new Integer(0);




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2