您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发

【原】记一次Java重写父类方法导致栈溢出的经历

不忘初心 不忘初心 2019-05-20 围观() 评论() 点赞() JAVA开发

简介:在重写一个父类方法时,忘记在调用的地方加上super关键字,导致Java栈溢出,报了一个“StackOverflowError”异常,因为调用栈太深了。

今天在重写一个父类方法时,忘记在调用的地方加上super关键字,导致Java栈溢出,报了一个“StackOverflowError”异常,因为调用栈太深了,所以日志超级无敌巨多。

贴张图给大家感受一下:

记一次Java重写父类方法导致栈溢出的经历

这里我只贴出一小部分。

java.lang.StackOverflowError: null
        at java.lang.Character.isWhitespace(Character.java:6789)
        at java.lang.Character.isWhitespace(Character.java:6757)
        at org.apache.commons.lang3.StringUtils.isBlank(StringUtils.java:346)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:28)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)
        at com.wolffy.reader.service.impl.UserServiceImpl.insert(UserServiceImpl.java:29)

可以看到,信息中提到的全部是UserServiceImpl的29行代码报错了,去看了一下,一开始竟然还没看出来

@Override
public User insert(User user) {
    if (!StringUtils.isBlank(user.getWxOpenId())) {
        return super.insert(user);
        //return insert(user); // 29行,万恶之源
    }
    String pass = user.getPassWord();
    if (StringUtils.isBlank(pass)) {
        pass = AESUtil.encrypt(Constants.DEFAULT_PASS);
    } else {
        pass = AESUtil.encrypt(pass);
    }
    user.setPassWord(pass);
    return super.insert(user);
}

注释掉的这一行就是异常信息中的第29行,这里没有指定调用super的方法,所以它默认会疯狂的递归调用自己,直到jvm的栈深度不够了,就会导致jvm栈溢出。

javajvm

看完文章,有任何疑问,请加入群聊一起交流!!!

很赞哦! ()

文章评论

  • 请先说点什么
    人参与,条评论

请使用电脑浏览器访问本页面,使用手机浏览器访问本页面会导致下载文件异常!!!

雨落无影

关注上方公众号,回复关键字【下载】获取下载码

用完即删,每次下载需重新获取下载码

若出现下载不了的情况,请及时联系站长进行解决

站点信息

  • 网站程序:spring + freemarker
  • 主题模板:《今夕何夕》
  • 文章统计:篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们