在类中方法外创建对象,运行时会报栈溢出异常

张开发 2020-08-30 07:13:29
class Circle{ double redius; Circle c = new Circle(); public static void main(String[] args){ Circle a = new Circle(); a.redius = 2.3; Circle b = new Circle(); b.redius = 5.5; System.out.println("a="+a.redius+" b="+b.redius); } }
...全文
7970 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
KeepSayingNo 2020-09-04
  • 打赏
  • 举报
回复
class Circle{ double redius; public static void main(String[] args){ Circle a = new Circle(); a.redius = 2.3; Circle b = new Circle(); b.redius = 5.5; System.out.println("a="+a.redius+" b="+b.redius); } }
张开发 2020-09-02
  • 打赏
  • 举报
回复
引用 1 楼 tianfang的回复:
Circle 中创建Circle ,创建实例时会陷入无限循环创建对象,直到内存溢出
谢谢您,这个可能会一直new下去,创建对象时不是在堆内存开辟空间吗,为什么会报栈内存溢出
qq_39936465 2020-09-02
  • 打赏
  • 举报
回复
引用 6 楼 张开发 的回复:
[quote=引用 1 楼 tianfang的回复:]Circle 中创建Circle ,创建实例时会陷入无限循环创建对象,直到内存溢出
谢谢您,这个可能会一直new下去,创建对象时不是在堆内存开辟空间吗,为什么会报栈内存溢出[/quote] 因为new确实是在堆内开辟的,但是栈内会保存变量名称,方法名称等等。你的类比较简单堆内占用的空间其实并不大,而栈默认大小要比堆要小很多,所以栈先溢出也是有可能的。
偏安zzcoder 2020-09-02
  • 打赏
  • 举报
回复
你new一个Circle对象的时候,就是再new一个Circle对象作为你的第一个对象的成员,这样就成了无限循环了,最后肯定会溢出的
  • 打赏
  • 举报
回复
这个类厉害了,能自己把自己玩儿死
清欢无白茶 2020-09-01
  • 打赏
  • 举报
回复
无限循环?可以有意思 要不然这样写 Circle c = null;
maradona1984 2020-09-01
  • 打赏
  • 举报
回复
有问题?你这样写当然会栈溢出,就算对象想持有同类型的对象,也不会在实例化的时候就new一个的.
tianfang 2020-08-30
  • 打赏
  • 举报
回复
Circle c = new Circle(); 是Circle 中包含一个Circle c 的属性
tianfang 2020-08-30
  • 打赏
  • 举报
回复
Circle 中创建Circle ,创建实例时会陷入无限循环创建对象,直到内存溢出

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧