黑马程序员技术交流社区

标题: 求详细解释这个代码造成内存溢出的原因 [打印本页]

作者: 张权    时间: 2012-11-26 22:04
标题: 求详细解释这个代码造成内存溢出的原因
本帖最后由 张权 于 2012-11-27 00:36 编辑

class Demo
{
                 Demo d=new Demo();
               
}
class DemoDemo
{
                public static void main(String[] args)
                {
                                new Demo();
                }
}代码就是这样,我知道是因为 我在类Demo里面直接 创建对象 Demo d = new Demo()造成的,这个对象没有在方法里面创建,但是为什么这样就会造成内存溢出呢?想了好久都没懂,最好画个图解释,谢谢了!!
作者: 齐银春    时间: 2012-11-26 22:14
这个是我回答上个内存溢出贴的代码  是因为new Demo() 不断新建,不断调用d 导致内存溢出异常   
作者: 张权    时间: 2012-11-26 22:23
齐银春 发表于 2012-11-26 22:14
这个是我回答上个内存溢出贴的代码  是因为new Demo() 不断新建,不断调用d 导致内存溢出异常     ...

为什么new Demo()会不断新建?  这个代码执行过程到底是怎样的???

作者: ssx0101    时间: 2012-11-26 22:28
本帖最后由 曹自祥 于 2012-11-26 22:29 编辑

你给类Demo定义了属性 Demo d=new Demo(),当在main方法里面执行 new Demo()的时候会给对象的属性赋值,就会执行Demo d=new Demo()语句。

示意图.JPG (23.13 KB, 下载次数: 5)

示意图.JPG

作者: 张权    时间: 2012-11-26 22:54
曹自祥 发表于 2012-11-26 22:28
你给类Demo定义了属性 Demo d=new Demo(),当在main方法里面执行 new Demo()的时候会给对象的属性赋值,就 ...

  明白了,谢谢啊!基础知识不扎实啊!   主要忽略了一点,Demo d = new Demo()这是一个属性,既然这是一个属性,那么当主函数建立一个对象(new Demo())的时候, 就有这个 属性 Demo d = new Demo(),而这个属性里面的new Demo() 又是创建一个对象,那么在创建对象的时候,又有一个 Demo d = new Demo()属性,属性里面又要 创建对象 new Demo(),就这样无限循环了




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