服务器之家

服务器之家 > 正文

JAVA中StackOverflowError错误的解决

时间:2021-09-10 12:16     来源/作者:奕铭呀

StackOverflowError   

原因

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

原理

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

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

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

    这是当时我的代码

JAVA中StackOverflowError错误的解决

     发生的错误

JAVA中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 StackOverflowError错误内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_53578500/article/details/115829489

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部