黑马程序员技术交流社区

标题: 对象 [打印本页]

作者: xiewen    时间: 2013-4-23 22:45
标题: 对象
本帖最后由 xiewen 于 2013-4-24 15:23 编辑

对象在内存中的状态?

作者: wangyougu010    时间: 2013-4-23 23:04
感觉你问的有点笼统,希望能帮到你

无标题.png (12.95 KB, 下载次数: 34)

无标题.png

作者: xiewen    时间: 2013-4-23 23:05
wangyougu010 发表于 2013-4-23 23:04
感觉你问的有点笼统,希望能帮到你

我还是不明白?
作者: breeze    时间: 2013-4-23 23:12
你可以理解为Java的引用类型变量时存在java中一个叫栈的空间, 你调用方法时方法就进入栈中, 当方法调用完毕后, 方法随之就消失了, 就不在栈中了, 对象是存在内存中的一个叫堆的区域, 堆中的对象返回了一个地址, 栈中保存的是引用, 就是变量, 变量指向了这个地址, 它们两个就链接上了, 当方法消失后, 变量随之消失, 但是对象还在, 这时候他的地址没有指向任何变量, 就是空引用, 当垃圾回收器空闲时会将空引用的对象回收处理
作者: Miss小强    时间: 2013-4-24 13:20
Java中内存区有五片:栈内存,对内存,方法区(也叫共享区),寄存器,本地方法区;
我们只要了解前面三个就可以了;看代码:
Student stu=null;//这个stu是一个引用,stu是放在栈内存中的;
stu=new Student();//这个new Student()一个对象,也叫一个实体,里面有一些数据,比如名字等 ,是放入堆内存中的;也就是说new出来的东西是在堆内存中;
那么stu=new Student();这句我们称之为,stu这个存在于栈内存中的引用指向了堆内存中的那个学生实体对象;
而方法区是存储静态成员的,是一些共享数据的内存区域,因此也叫共享区;

希望能帮到你。。。。
作者: 尹丽峰    时间: 2013-4-24 13:38
记住 只要是new出来的都在堆区,比如说int[]arr= new int[]{3,4,5,6}; 3 4 5 6就在堆内存中,arr在栈内存中,arr的引用指向 newint[]它的内存地址值也叫哈希值
作者: xiewen    时间: 2013-4-24 15:24
breeze 发表于 2013-4-23 23:12
你可以理解为Java的引用类型变量时存在java中一个叫栈的空间, 你调用方法时方法就进入栈中, 当方法调用完毕 ...

非常谢谢!
作者: xiewen    时间: 2013-4-24 15:25
尹丽峰 发表于 2013-4-24 13:38
记住 只要是new出来的都在堆区,比如说int[]arr= new int[]{3,4,5,6}; 3 4 5 6就在堆内存中,arr在栈内存中 ...

非常谢谢!
作者: xiewen    时间: 2013-4-24 15:25
Miss小强 发表于 2013-4-24 13:20
Java中内存区有五片:栈内存,对内存,方法区(也叫共享区),寄存器,本地方法区;
我们只要了解前面三个 ...

非常谢谢!




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