A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄伟财 中级黑马   /  2013-12-20 16:38  /  1192 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果对象还没存在,那么类中的成员变量保存在哪里呢,是在栈中保存吗?

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

10 个回复

倒序浏览
类中的成员变量,
如果是静态的:
      随着类的加载而加载,存放在方法区中的静态区
如果不是静态的:
     对象还没存在,那么成员变量也不存在,如果对象存在了,就存放在堆内存中,对象也是存放在堆内存中的。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
litaojisuanji 发表于 2013-12-20 16:52
类中的成员变量,
如果是静态的:
      随着类的加载而加载,存放在方法区中的静态区

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

初始化了实力变量?
回复 使用道具 举报
litaojisuanji 发表于 2013-12-20 17:04
初始化了实力变量?

理解就行了嘛,是实例变量
回复 使用道具 举报
黄伟财 发表于 2013-12-20 17:20
理解就行了嘛,是实例变量

既然你都说实例了,那就是通过new 创建对象了,那就在堆里。。。。
回复 使用道具 举报
litaojisuanji 发表于 2013-12-20 17:34
既然你都说实例了,那就是通过new 创建对象了,那就在堆里。。。。

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

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

分两种情况。1静态变量,存储在方法区的静态区。2 不是静态,既然对象没建立,成员变量肯定也不存在。如果来了个new,则在堆里面。
回复 使用道具 举报
你好,成员变量分为两种:静态成员变量和非静态成员变量。
静态变量在类加载的时候就已经创建了。并存放在方法区。静态变量只初始化一次。
而非静态成员变量是在你new一个类的时候才产生。存放在堆内存里面。
但是如果你不建立对象,那么就没有非静态成员变量。

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

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报 1 0
周志 中级黑马 2013-12-20 20:36:29
11#
黄伟财 发表于 2013-12-20 18:02
我明白了,可是和你的理解不同,我认为,例如 int a=0这样初始化了变量,但是没有创建对象,它是在栈中的 ...

int a=0 实际是初始化了 1.5版本有自动装箱和拆箱  实际就相当于这样写 Integer a=new Integer(0);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马