JAVA中StackOverflowError错误的解决

 更新时间:2021年04月21日 09:28:40   作者:奕铭呀  
这篇文章主要介绍了JAVA中StackOverflowError错误的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

StackOverflowError   

原因

    根据名字的意思可以大致知道它是跟函数栈有关的错误,就是函数栈调用太深了,可能是代码中有了循环调用方法而无法退出的情况。而像while这样的死循环,不会报错,程序会一直执行下去,占用内存。

原理

    StackOverflowError 是一个java中常出现的错误:在jvm运行时的数据区域中有一个java虚拟机栈,当执行java方法时会进行压栈弹栈的操作。在栈中会保存局部变量,操作数栈,方法出口等等。jvm规定了栈的最大深度,当执行时栈的深度大于了规定的深度,就会抛出StackOverflowError错误。

    所以当你在一个函数再调用此函数时,而忘记设置出口就会出现这个错误。

    今天我遇到的问题就是我想覆写hash函数,想要在此函数调用的结果是原来的hash函数调用的结果再随便加一个字符串,结果就忽视了函数会一直调用下去,相当于没有设置递归函数的出口,所以导致了StackOverflowError错误。

    这是当时我的代码

     发生的错误

     当我把函数名字改一改就能正常运行。还有原来的一些设置图书和学生类时,这两个类中都覆写了toString方法,这两个类也可以互相调用,当最后调用tostring时也会发生错误。

下面是我在网上找的一段代码

//book和student相互循环引用
public class StackOverFlowDemo {
 
    static class Student{
        String name;
        Book book;
 
        public Student(String name) {
            this.name = name;
        }
        //循环调用toString方法
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", book=" + book +
                    '}';
        }
    }
 
    static class Book {
        String isbn;
        Student student;
 
        public Book(String isbn, Student student) {
            this.isbn = isbn;
            this.student = student;
        }
 
        @Override
        public String toString() {
            return "Book{" +
                    "isbn='" + isbn + '\'' +
                    ", student=" + student +
                    '}';
        }
    }
 
    public static void main(String[] args) {
        Student student=new Student("zhang3");
        Book book=new Book("1111",student);
        student.book=book;
        System.out.println(book.toString());
    }
 
}

发生了如下错误

到此这篇关于JAVA中StackOverflowError错误的解决的文章就介绍到这了,更多相关JAVA StackOverflowError错误内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java使用动态规划算法思想解决背包问题

    Java使用动态规划算法思想解决背包问题

    背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高
    2022-04-04
  • Java中Object类的理解和使用

    Java中Object类的理解和使用

    Object类是java.lang包下的核心类,Object类是所有类的父类,何一个类时候如果没有明确的继承一个父类的话,那么它就是Object的子类,本文将通过代码示例详细介绍一下Java中Object类的理解和使用,需要的朋友可以参考下
    2023-06-06
  • 完美解决MybatisPlus插件分页查询不起作用总是查询全部数据问题

    完美解决MybatisPlus插件分页查询不起作用总是查询全部数据问题

    这篇文章主要介绍了解决MybatisPlus插件分页查询不起作用总是查询全部数据问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Mybatis主配置文件的properties标签详解

    Mybatis主配置文件的properties标签详解

    这篇文章主要介绍了Mybatis主配置文件的properties标签,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 详解context root修改无效web修改项目路径(eclipse)

    详解context root修改无效web修改项目路径(eclipse)

    这篇文章主要介绍了详解context root修改无效web修改项目路径(eclipse)的相关资料,需要的朋友可以参考下
    2017-04-04
  • SpringCloud基于RestTemplate微服务项目案例解析

    SpringCloud基于RestTemplate微服务项目案例解析

    这篇文章主要介绍了SpringCloud基于RestTemplate微服务项目案例,在写SpringCloud搭建微服务之前,先搭建一个不通过springcloud只通过SpringBoot和Mybatis进行模块之间通讯,通过一个案例给大家详细说明,需要的朋友可以参考下
    2022-05-05
  • Spring计划任务用法实例详解

    Spring计划任务用法实例详解

    这篇文章主要介绍了Spring计划任务用法,结合实例形式详细分析了spring计划任务相关原理、配置、使用方法及操作注意事项,需要的朋友可以参考下
    2019-11-11
  • java 读取网页内容的实例详解

    java 读取网页内容的实例详解

    这篇文章主要介绍了java 读取网页内容的实例详解的相关资料,希望通过本文能帮助到大家,让大家学习理解这部分内容,需要的朋友可以参考下
    2017-09-09
  • Java 之类型转换与多态详情

    Java 之类型转换与多态详情

    Java使用类创造新的类型(type),并使用继承来便利我们创建类。再深一层讲类型,并是多态(polymorphism)的概念。本文将给大家介绍Java 的类型转换与多态,需要的小伙伴可以参考下面文章的具体内容
    2021-09-09
  • mybatis spring配置SqlSessionTemplate的使用方式

    mybatis spring配置SqlSessionTemplate的使用方式

    这篇文章主要介绍了mybatis spring配置SqlSessionTemplate的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论