You need to enable JavaScript to run this app. main方法与构造器中重复创建对象触发StackOverflowError的原因
优惠活动
大模型
产品
解决方案
定价
更多

main方法与构造器中重复创建对象触发StackOverflowError的原因

StackOverflowError报错含义与触发原因解析

报错核心含义

java.lang.StackOverflowError是Java虚拟机抛出的运行时错误,当JVM为线程方法调用分配的栈内存空间被完全耗尽,无法再为新的方法调用生成对应的栈帧时,就会触发该错误,属于无法通过程序捕获恢复的严重错误类型。

示例代码的触发逻辑拆解

结合示例中给出的Assignment3类代码,报错的完整触发流程为:

  • 程序启动后进入main方法,首先执行new Assignment3()语句,触发Assignment3无参构造器的执行
  • 该类的无参构造器内部未设置任何递归终止判断,直接执行Assignment3 obj = new Assignment3()语句,再次触发同类对象的创建流程
  • 每一次对象创建都会向栈内存推入一层新的构造器调用栈帧,且这个调用链没有任何退出出口:构造器内创建新对象→新对象的构造器逻辑再次创建下一个新对象,形成无限循环
  • 随着递归调用层级不断加深,栈内存被持续占用直到完全耗尽,JVM随即抛出StackOverflowError,程序直接中断,后续的System.out.println("Hello")语句永远无法执行到。

本质问题总结

这段代码的核心逻辑缺陷是在类的构造器内部无终止条件地创建当前类的实例,等价于无出口的无限递归调用,最终必然触发栈内存溢出。如果要修正这类问题,需要在构造逻辑中增加递归终止的判断条件,从根源切断无限循环的调用链。

内容的提问来源于stack exchange,提问作者Kiran BS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 02:06:08