前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >啥也没做,测试考试我接口StackOverflowError了,让查一下

啥也没做,测试考试我接口StackOverflowError了,让查一下

作者头像
烟雨平生
发布2024-06-27 20:48:21
430
发布2024-06-27 20:48:21
举报
文章被收录于专栏:数字化之路数字化之路

在软件开发过程中,测试环节是确保代码质量和稳定性的关键步骤。然而,测试过程中遇到的问题往往需要开发者迅速定位并解决。本文将分享一个在测试环境中遇到的StackOverflowError异常的排查过程,并提供一些实用的建议。

测试反馈:StackOverflowError的触发

正在戴着耳机沉浸在代码的海洋中,不可自拔

测试遇到一个报错,拉了一圈人,都说不是自己的,让我看看。

写代码正嗨的不行,一下子转到这个报错上:

问题还是要解决的

根据测试提供的信息,找到搜索关键词查日志,果然有报错: java.lang.StackOverflowError

什么原因呢?

问题排查:递归调用的陷阱

在自己的开发分支上找了下,没有找到这个类

想了下,恍然大悟,测试环境发的是集成分支,可能是代码合并或其它同学写的。

切到集成分支后,找到这个类:

看IDEA上的提示,存在循环调用。

怎么改?

看着这个方法也没啥用呢,删了吧。

毕竟,父类中有这个方法,并且子类中也没有啥逻辑

并且,“Bug都是从代码中来的,没有代码,就没有Bug”

编译报错了:原来与父类相比,返回值类型与调用方不匹配。

父类中返回的是父类对象 子类中返回的是子类对象!

经过仔细的代码审查,我们发现问题出在一个子类重写父类方法的过程中。原本期望子类能够调用父类的方法,但开发者在实现时,错误地在当前方法中直接调用了自己,而非使用super.方法名来调用父类的方法。这导致了无限递归调用,最终触发了StackOverflowError。

如果想“短平快”的解决这个报错,只能这样了:

说明:正确的重写方式。正确的做法应该是在子类的方法中使用super.方法名来确保调用的是父类的方法。这样做可以保持代码的清晰性和预期的行为,避免因错误的调用导致的异常。

代码语言:javascript
复制
class Parent {
    void method() {
        // 父类方法实现
    }
}

class Child extends Parent {
    @Override
    void method() {
        super.method(); // 调用父类方法
        // 子类特有逻辑
    }
}

下面这个IDEA认为不规范的地方也要fix一下:

fix后的最终代码:

小结与建议

1、通过Bean Copy来复用父类字段

在某些情况下,如果子类需要复用父类的字段,可以考虑使用Bean Copy技术来避免直接继承带来的问题。这样可以在不破坏原有结构的情况下,实现字段的复用。

2、关注IDEA的提示

现代集成开发环境(IDE)如IntelliJ IDEA提供了强大的代码检查和提示功能。开发者应该充分利用这些工具,及时解决IDE提示的潜在问题,以减少bug的产生。

3、其它长期且正确的事情

代码审查:定期进行代码审查,不仅可以发现潜在的bug,还可以提高团队的代码质量。

单元测试:编写单元测试,确保每个方法按预期工作,特别是在修改或重写方法时。

持续学习:技术不断进步,作为开发者,我们应该持续学习新的编程范式和最佳实践,以提高开发效率和代码质量。

通过这次StackOverflowError的排查,我们不仅解决了当前的问题,还学到了如何通过最佳实践来预防类似问题的发生。希望这些经验对其他开发者也有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 的数字化之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试反馈:StackOverflowError的触发
  • 问题排查:递归调用的陷阱
  • 怎么改?
  • 小结与建议
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档