java.lang.StackOverflowError递归异常

  • hello,我是小灰熊Carroll,下面这张图片不是本人,别误会噢,嘿嘿。
  • 开始:首先上个—错误代码
  • 在Controller中打个“可爱的”断点
  • 可以看到出现异常
  • 展开返回数据的结构
  • 每个报错的children里面的size()方法都是4个,并且都是重复的。这个无限循环导致了*StackOverflowError异常*,放开断点继续执行
  • 正确代码
  • 再次执行
  • 问题成功解决
  • 总结:递归的无线循环导致-StackOverflowError(堆栈溢出错误)
  • 代码中有些命名不规范,主要是为了表达一种“特立独行、放荡不羁”的美好精神。然而,在提交code的时候小熊Carroll还是认真的改好名称呢,哈………有机会,下次见。

hello,我是小灰熊Carroll,下面这张图片不是本人,别误会噢,嘿嘿。

开始:首先上个—错误代码

//递归批量复制private List<BomCopyTarget> lxxCopy(BomCopy bomCopy,BomCopyTarget bomCopyTarget) {List<BomCopyTarget> copyTargetList=new ArrayList<>();if (!CollectionUtils.isEmpty( bomCopy.getChildren())) {for (BomCopy copyBom : bomCopy.getChildren()) {BomCopyTarget bomCopyTarget1=new BomCopyTarget();bomCopyTarget1.setId(bomCopyTarget.getId());bomCopyTarget1.setBomName(bomCopyTarget.getBomName());bomCopyTarget1.setVersion(bomCopyTarget.getVersion());bomCopyTarget1.setProcessId(copyBom.getProcessId());copyTargetList.add(bomCopyTarget1);List<BomCopyTarget> sonCopyTargets = lxxCopy(copyBom,bomCopyTarget);//下面为多余的错误代码bomCopyTarget.setChildren(sonCopyTargets);copyTargetList.add(bomCopyTarget);}}return copyTargetList;}@Overridepublic List<BomCopyTarget> getLxxCopy(BomCopy bomCopy, BomCopyTarget bomCopyTarget) {return lxxCopy(bomCopy,bomCopyTarget);}

在Controller中打个“可爱的”断点

可以看到出现异常

展开返回数据的结构

每个报错的children里面的size()方法都是4个,并且都是重复的。这个无限循环导致了StackOverflowError异常,放开断点继续执行

**********************
BomCopyTarget(id=2, bomName=null, version=null, processId=2, children=null)
2021.01.06 at 23:32:07 CST ERROR com.wallcloth.exception.GlobalExceptionHandler exceptionHandler() @45 - Exception.url:http://localhost:8080/api//basic/biz/bom/bulkcopy ERROR:Handler dispatch failed; nested exception is java.lang.StackOverflowError Exception:java.lang.StackOverflowError
2021.01.06 at 23:32:07 CST ERROR com.wallcloth.exception.GlobalExceptionHandler exceptionHandler() @46 - Exception
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowErrorat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) [spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) [spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) [spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) [tomcat-embed-core-9.0.37.jar:4.0.FR]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]Caused by: java.lang.StackOverflowError
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]at com.wallcloth.model.biz.bom.entity.BomCopyTarget.toString(BomCopyTarget.java:13) ~[classes/:?]at java.util.AbstractCollection.toString(AbstractCollection.java:462) ~[?:1.8.0_181]at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]at com.wallcloth.model.biz.bom.entity.BomCopyTarget.toString(BomCopyTarget.java:13) ~[classes/:?]at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]at java.util.AbstractCollection.toString(AbstractCollection.java:462) ~[?:1.8.0_181]

正确代码

//递归批量复制private List<BomCopyTarget> lxxCopy(BomCopy bomCopy,BomCopyTarget bomCopyTarget) {List<BomCopyTarget> copyTargetList=new ArrayList<>();if (!CollectionUtils.isEmpty( bomCopy.getChildren())) {for (BomCopy copyBom : bomCopy.getChildren()) {BomCopyTarget bomCopyTarget1=new BomCopyTarget();bomCopyTarget1.setId(bomCopyTarget.getId());bomCopyTarget1.setBomName(bomCopyTarget.getBomName());bomCopyTarget1.setVersion(bomCopyTarget.getVersion());bomCopyTarget1.setProcessId(copyBom.getProcessId());copyTargetList.add(bomCopyTarget1);List<BomCopyTarget> sonCopyTargets = lxxCopy(copyBom,bomCopyTarget);bomCopyTarget1.setChildren(sonCopyTargets);}}return copyTargetList;}

再次执行


问题成功解决

总结:递归的无线循环导致-StackOverflowError(堆栈溢出错误)

代码中有些命名不规范,主要是为了表达一种“特立独行、放荡不羁”的美好精神。然而,在提交code的时候小熊Carroll还是认真的改好名称呢,哈………有机会,下次见。

java.lang.StackOverflowError递归异常相关推荐

  1. 科学处理java.lang.StackOverflowError: null异常

    java.lang.StackOverflowError: null异常处理 在项目运行中出现StackOverflowError 首先要检查在编码中是否有明显的递归编码,比如死循环或者无限循环调用. ...

  2. java.lang.StackOverflowError递归的栈溢出错误

    递归在JAVA中是指方法本身调用自己,以此来解决问题普通循环不太容易解决的问题. 递归能解决一些特定的问题,但相对的也有其缺点.递归运行速度较慢,在递归调用过 程中系统为每一层返回点,局部量等提供栈来 ...

  3. java.lang.StackOverflowError异常

    遇到的异常/错误 今天在写mybatis的SQL语句和关联查询中,出现了这个异常,java.lang.StackOverflowError. java.lang.StackOverflowError指 ...

  4. Java EE之Hibernate异常总结【5】java.lang.StackOverflowError[栈溢出]

    Java EE之Hibernate异常总结[5]java.lang.StackOverflowError[栈溢出] 参考文章: (1)Java EE之Hibernate异常总结[5]java.lang ...

  5. 小林子的日常维护之-java.lang.StackOverflowError: null

    背景:多级指标看板展示(每个指标都有一个父级指标id来维护指标树) 问题排查:找到错误原因并且修复 报错日志如下: 2021-11-28 14:40:15 [http-nio-9000-exec-23 ...

  6. Json格式转换报java.lang.StackOverflowError

    栈溢出就是缓冲区溢出的一种. 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果.程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区.如果向缓冲 ...

  7. java.sql.SQLException: java.lang.StackOverflowError

    2019独角兽企业重金招聘Python工程师标准>>> 今天用jsp自定义标签实现一个小功能:刷新某个页面,通过自定义标签的后台tag方法去数据库查询所需数据,这样,当页面刷新完成之 ...

  8. Spark出现java.lang.stackoverflowerror的解决方法

    正在测试的程序需要多次迭代(400+次),每次迭代有复杂的运算 迭代到100多次的时候报java.lang.stackoverflowerror的错误 解决方法:先checkpoint()再count ...

  9. java.lang.reflect.InvocationTargetException异常

    java.lang.reflect.InvocationTargetException异常 参考文章: (1)java.lang.reflect.InvocationTargetException异常 ...

最新文章

  1. 《深入理解Java虚拟机》笔记01 -- 运行时数据区
  2. 《构建之法》阅读笔记4
  3. WeChat小程序报错Module not found: Can‘t resolve ‘umtrack-alipay‘ in
  4. 手机MODEM 开发(14)----高通平台手机开发之Modem
  5. java02动手动脑
  6. springboot配置微信公众号获取openid
  7. 在vpp中做nat实验
  8. Nutch是一个优秀的开源的数据爬取框架
  9. LoRa网关与服务器通信——MQTT
  10. gcj编译java_怎样用gcj编译java程序
  11. pt与px的对应关系
  12. 编译go版本的supervisord
  13. 如何实现图片和图题的组合
  14. 新浪云 php,php在新浪云中使用imagick的方法
  15. MiniGUI移植过程
  16. 【Java】动态代理原理分析
  17. 《化工流体力学》课程笔记(四)
  18. Python 实现握手定理
  19. 深拷贝和完全拷贝对比的探究
  20. 使用联通云OSS小程序直传

热门文章

  1. 向U盘拷贝文件,总是提示对于目标系统,文件过大??
  2. 数据库sql嵌套查询
  3. 2022-2028全球与中国紫外线传感器市场现状及未来发展趋势
  4. 机器学习系列——入门阶段(自我学习阶段的总结)
  5. 以太网:权威指南 英文_信息图:创建网站的客户指南
  6. Java基础——异常
  7. java护士排班 test 根据 1天24小时分成6班,一个护士一天上8个小时,一周上40小时,进行一周排班安排!拷贝,直接运行。
  8. java计算机毕业设计医院医护人员排班系统源码+数据库+系统+lw文档+mybatis+运行部署
  9. guess game
  10. html单选框弹出输入框,JS实现点击单选按钮弹出对话框输入值