黑马程序员技术交流社区

标题: 成员变量和局部变量的问题 [打印本页]

作者: 黄陂酷歌    时间: 2014-3-11 18:34
标题: 成员变量和局部变量的问题
成员变量是类里面的变量,局部变量是函数里面的变量;成员变量在堆内存里面,局部变量在占内存里面,可以这样理解吗?
作者: .......    时间: 2014-3-11 18:46
可以的:
局部变量和成员变量主要是他们作用域的区别,
成员变量个是类内部;局部变量是定义其的方法体内部(或者方法体内部的某一程序块内——大括号,主要看定义的位置)。
另外,成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。
还有,在内存中的位置也不一样。成员变量在所在类被实例化后,存在堆内存中;局部变量在所在方法调用时,存在栈内存空间中。
作者: victorsun    时间: 2014-3-11 18:54
你这么理解其实是可以的,因为我们绝大多数遇到的成员变量和局部变量都是这个形式。那么我说一说,这两个变量本质的区别。
1.在Java中,局部变量必须初始化;成员变量可以不用初始化,系统自动初始化。
2.正如那你所描述,成员变量在类中,局部变量在方法中。
3.声明成员变量时可以不初始化但是被final修饰且没有static的必须显式赋值,而局部变量必须手动初始化。
4.成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及static修饰;但两者都可以定义成final型。
5.成员变量存储在堆,局部变量存储在栈。
作者: 2528870651    时间: 2014-3-11 18:59
成员变量作用于整个类中。有默认初始化值。
在堆内存中,因为对象的存在,才在内存中存在。
局部变量变量作用于函数中,或者语句中。没有默认初始化值,要手动初始化。
存在栈内存中。

作者: 战狼    时间: 2014-3-13 17:21
成员变量存在于类中,而局部变量存在于函数中。
作者: 艮昕辶    时间: 2014-3-13 22:43
csdn的一个博主话的   内存模型是针对jvm而言的  而且java虚拟机的内存处理挺复杂的  不是简单的像c那样理解就可以的
我百度了好多也没有看懂多少

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

jvm内存模型.jpg

作者: 谜燕    时间: 2014-3-14 15:24
成员变量的作用范围是整个类,而局部变量的作用域是整个它所在的函数。





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