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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄陂酷歌 中级黑马   /  2014-3-11 18:34  /  1122 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

成员变量是类里面的变量,局部变量是函数里面的变量;成员变量在堆内存里面,局部变量在占内存里面,可以这样理解吗?

6 个回复

倒序浏览
可以的:
局部变量和成员变量主要是他们作用域的区别,
成员变量个是类内部;局部变量是定义其的方法体内部(或者方法体内部的某一程序块内——大括号,主要看定义的位置)。
另外,成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。
还有,在内存中的位置也不一样。成员变量在所在类被实例化后,存在堆内存中;局部变量在所在方法调用时,存在栈内存空间中。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
你这么理解其实是可以的,因为我们绝大多数遇到的成员变量和局部变量都是这个形式。那么我说一说,这两个变量本质的区别。
1.在Java中,局部变量必须初始化;成员变量可以不用初始化,系统自动初始化。
2.正如那你所描述,成员变量在类中,局部变量在方法中。
3.声明成员变量时可以不初始化但是被final修饰且没有static的必须显式赋值,而局部变量必须手动初始化。
4.成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及static修饰;但两者都可以定义成final型。
5.成员变量存储在堆,局部变量存储在栈。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
成员变量作用于整个类中。有默认初始化值。
在堆内存中,因为对象的存在,才在内存中存在。
局部变量变量作用于函数中,或者语句中。没有默认初始化值,要手动初始化。
存在栈内存中。

评分

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

查看全部评分

回复 使用道具 举报
成员变量存在于类中,而局部变量存在于函数中。
回复 使用道具 举报
csdn的一个博主话的   内存模型是针对jvm而言的  而且java虚拟机的内存处理挺复杂的  不是简单的像c那样理解就可以的
我百度了好多也没有看懂多少

jvm内存模型.jpg (91.31 KB, 下载次数: 3)

jvm内存模型.jpg

评分

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

查看全部评分

回复 使用道具 举报
谜燕 中级黑马 2014-3-14 15:24:32
7#
成员变量的作用范围是整个类,而局部变量的作用域是整个它所在的函数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马