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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张权 中级黑马   /  2012-11-26 22:04  /  920 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张权 于 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()造成的,这个对象没有在方法里面创建,但是为什么这样就会造成内存溢出呢?想了好久都没懂,最好画个图解释,谢谢了!!

4 个回复

倒序浏览
这个是我回答上个内存溢出贴的代码  是因为new Demo() 不断新建,不断调用d 导致内存溢出异常   

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
齐银春 发表于 2012-11-26 22:14
这个是我回答上个内存溢出贴的代码  是因为new Demo() 不断新建,不断调用d 导致内存溢出异常     ...

为什么new Demo()会不断新建?  这个代码执行过程到底是怎样的???
回复 使用道具 举报
本帖最后由 曹自祥 于 2012-11-26 22:29 编辑

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

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

示意图.JPG

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 很给力!

查看全部评分

回复 使用道具 举报
曹自祥 发表于 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(),就这样无限循环了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马