黑马程序员技术交流社区

标题: 关于毕向东老师基础视频day05第4个视频(成员变量局部变... [打印本页]

作者: 王瀛    时间: 2012-12-22 16:18
标题: 关于毕向东老师基础视频day05第4个视频(成员变量局部变...
毕老师说:

成员变量和局部变量。
作用范围:
成员变量作用于整个类中。
局部变量作用于函数中,或者语句中。
在内存中的位置:
成员变量:在堆内存中,因为对象的存在,才在内存中存在。
局部变量:存在栈内存中。

对于他们在内存中的位置,我不是很明白,能否举例或者画图说一下,谢谢!~
作者: 张胜格    时间: 2012-12-22 16:36
本帖最后由 张胜格 于 2012-12-22 16:39 编辑

栈与堆都是Java用来在Ram中存放数据的地方。Java是自动管理栈和堆的,程序员不能直接地设置栈或堆。
Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
栈有一个很重要的特殊性,就是存在栈中的数据可以共享。
作者: 张占忠    时间: 2012-12-22 17:13
首先你要搞懂什么是成员变量  什么是,局部变量!
成员变量:类的属性;  局部变量:方法(函数)中的属性!
首先咱们们说,作用范围:
成员变量作用于整个类中。
你可以把成员变量,理解成这个类 自己有的属性!

类,包含什么?
属性 ,  构造函数(方法)  普通函数(方法)
函数 只是,类的一部分!
所以函数,可以,调用类中的属性。
(一个类中有多个方法,方法从堆里调用类中的属性。在内存里进行处理)

但是 函数 也有自己独特的属性。这种属性,也可以叫做,局部变量!
当这个函数不再起作用的时候,他的属性,也会跟着这个函数消失!

而 ,类的属性,是放在,堆里,不是内存里所以不会失效!
就相于,一个类中,有多个方法,你这个,方法不用这个类的属性了!
其他方法换要用!
但是,注意: 局部变量。超出方法范围就会失效!
所以,局部变量是不可以,相互调用的!

举例说明: 小明,小强! 都要,擦黑板!
黑板擦在课桌上。
小明擦黑板,这个方法是在黑板上执行的!但是,擦完以后,还要放在课桌上。
小强,再从,课桌上,拿黑板擦!
不知道,我这么说,明不明白!

作者: 徐兆进    时间: 2012-12-22 22:25
其实JAVA的对象是放在堆内存中的 对于对象的引用时放在栈内存中的 应为成员变量的生命周期是于对象的周期一致的 对象不被垃圾回收器收回则成员变量一直存在 所以要放在堆内存里
但局部变量则在你调用的方法时被创建,调用结束被收回所以是放在临时的栈内存中的 。栈内存由于小和速度快的特点是存放对象的引用和基本数据类型的
就向我下面图所画的一样 堆和栈的关系 和他们存放变量的一些规则

无标题.png (12.06 KB, 下载次数: 12)

无标题.png





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