java.lang.StackOverflowError递归异常
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递归异常相关推荐
- 科学处理java.lang.StackOverflowError: null异常
java.lang.StackOverflowError: null异常处理 在项目运行中出现StackOverflowError 首先要检查在编码中是否有明显的递归编码,比如死循环或者无限循环调用. ...
- java.lang.StackOverflowError递归的栈溢出错误
递归在JAVA中是指方法本身调用自己,以此来解决问题普通循环不太容易解决的问题. 递归能解决一些特定的问题,但相对的也有其缺点.递归运行速度较慢,在递归调用过 程中系统为每一层返回点,局部量等提供栈来 ...
- java.lang.StackOverflowError异常
遇到的异常/错误 今天在写mybatis的SQL语句和关联查询中,出现了这个异常,java.lang.StackOverflowError. java.lang.StackOverflowError指 ...
- Java EE之Hibernate异常总结【5】java.lang.StackOverflowError[栈溢出]
Java EE之Hibernate异常总结[5]java.lang.StackOverflowError[栈溢出] 参考文章: (1)Java EE之Hibernate异常总结[5]java.lang ...
- 小林子的日常维护之-java.lang.StackOverflowError: null
背景:多级指标看板展示(每个指标都有一个父级指标id来维护指标树) 问题排查:找到错误原因并且修复 报错日志如下: 2021-11-28 14:40:15 [http-nio-9000-exec-23 ...
- Json格式转换报java.lang.StackOverflowError
栈溢出就是缓冲区溢出的一种. 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果.程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区.如果向缓冲 ...
- java.sql.SQLException: java.lang.StackOverflowError
2019独角兽企业重金招聘Python工程师标准>>> 今天用jsp自定义标签实现一个小功能:刷新某个页面,通过自定义标签的后台tag方法去数据库查询所需数据,这样,当页面刷新完成之 ...
- Spark出现java.lang.stackoverflowerror的解决方法
正在测试的程序需要多次迭代(400+次),每次迭代有复杂的运算 迭代到100多次的时候报java.lang.stackoverflowerror的错误 解决方法:先checkpoint()再count ...
- java.lang.reflect.InvocationTargetException异常
java.lang.reflect.InvocationTargetException异常 参考文章: (1)java.lang.reflect.InvocationTargetException异常 ...
最新文章
- 《深入理解Java虚拟机》笔记01 -- 运行时数据区
- 《构建之法》阅读笔记4
- WeChat小程序报错Module not found: Can‘t resolve ‘umtrack-alipay‘ in
- 手机MODEM 开发(14)----高通平台手机开发之Modem
- java02动手动脑
- springboot配置微信公众号获取openid
- 在vpp中做nat实验
- Nutch是一个优秀的开源的数据爬取框架
- LoRa网关与服务器通信——MQTT
- gcj编译java_怎样用gcj编译java程序
- pt与px的对应关系
- 编译go版本的supervisord
- 如何实现图片和图题的组合
- 新浪云 php,php在新浪云中使用imagick的方法
- MiniGUI移植过程
- 【Java】动态代理原理分析
- 《化工流体力学》课程笔记(四)
- Python 实现握手定理
- 深拷贝和完全拷贝对比的探究
- 使用联通云OSS小程序直传
热门文章
- 向U盘拷贝文件,总是提示对于目标系统,文件过大??
- 数据库sql嵌套查询
- 2022-2028全球与中国紫外线传感器市场现状及未来发展趋势
- 机器学习系列——入门阶段(自我学习阶段的总结)
- 以太网:权威指南 英文_信息图:创建网站的客户指南
- Java基础——异常
- java护士排班 test 根据 1天24小时分成6班,一个护士一天上8个小时,一周上40小时,进行一周排班安排!拷贝,直接运行。
- java计算机毕业设计医院医护人员排班系统源码+数据库+系统+lw文档+mybatis+运行部署
- guess game
- html单选框弹出输入框,JS实现点击单选按钮弹出对话框输入值