JAVA中StackOverflowError错误的解决

网友投稿 252 2023-01-21

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;

yMegwHdb http:// System.out.println(book.toString());

}

}

发生了如下错误

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ssm实现视频的上传与播放的示例代码
下一篇:开放api接口的(开放api接口架构)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~