JAVA中StackOverflowError錯(cuò)誤的解決
StackOverflowError
原因
根據(jù)名字的意思可以大致知道它是跟函數(shù)棧有關(guān)的錯(cuò)誤,就是函數(shù)棧調(diào)用太深了,可能是代碼中有了循環(huán)調(diào)用方法而無(wú)法退出的情況。而像while這樣的死循環(huán),不會(huì)報(bào)錯(cuò),程序會(huì)一直執(zhí)行下去,占用內(nèi)存。
原理
StackOverflowError 是一個(gè)java中常出現(xiàn)的錯(cuò)誤:在jvm運(yùn)行時(shí)的數(shù)據(jù)區(qū)域中有一個(gè)java虛擬機(jī)棧,當(dāng)執(zhí)行java方法時(shí)會(huì)進(jìn)行壓棧彈棧的操作。在棧中會(huì)保存局部變量,操作數(shù)棧,方法出口等等。jvm規(guī)定了棧的最大深度,當(dāng)執(zhí)行時(shí)棧的深度大于了規(guī)定的深度,就會(huì)拋出StackOverflowError錯(cuò)誤。
所以當(dāng)你在一個(gè)函數(shù)再調(diào)用此函數(shù)時(shí),而忘記設(shè)置出口就會(huì)出現(xiàn)這個(gè)錯(cuò)誤。
今天我遇到的問(wèn)題就是我想覆寫(xiě)hash函數(shù),想要在此函數(shù)調(diào)用的結(jié)果是原來(lái)的hash函數(shù)調(diào)用的結(jié)果再隨便加一個(gè)字符串,結(jié)果就忽視了函數(shù)會(huì)一直調(diào)用下去,相當(dāng)于沒(méi)有設(shè)置遞歸函數(shù)的出口,所以導(dǎo)致了StackOverflowError錯(cuò)誤。
這是當(dāng)時(shí)我的代碼

發(fā)生的錯(cuò)誤

當(dāng)我把函數(shù)名字改一改就能正常運(yùn)行。還有原來(lái)的一些設(shè)置圖書(shū)和學(xué)生類時(shí),這兩個(gè)類中都覆寫(xiě)了toString方法,這兩個(gè)類也可以互相調(diào)用,當(dāng)最后調(diào)用tostring時(shí)也會(huì)發(fā)生錯(cuò)誤。
下面是我在網(wǎng)上找的一段代碼
//book和student相互循環(huán)引用
public class StackOverFlowDemo {
static class Student{
String name;
Book book;
public Student(String name) {
this.name = name;
}
//循環(huán)調(diào)用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());
}
}
發(fā)生了如下錯(cuò)誤

到此這篇關(guān)于JAVA中StackOverflowError錯(cuò)誤的解決的文章就介紹到這了,更多相關(guān)JAVA StackOverflowError錯(cuò)誤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用動(dòng)態(tài)規(guī)劃算法思想解決背包問(wèn)題
背包問(wèn)題(Knapsack problem)是一種組合優(yōu)化的NP完全問(wèn)題。問(wèn)題可以描述為:給定一組物品,每種物品都有自己的重量和價(jià)格,在限定的總重量?jī)?nèi),我們?nèi)绾芜x擇,才能使得物品的總價(jià)格最高2022-04-04
完美解決MybatisPlus插件分頁(yè)查詢不起作用總是查詢?nèi)繑?shù)據(jù)問(wèn)題
這篇文章主要介紹了解決MybatisPlus插件分頁(yè)查詢不起作用總是查詢?nèi)繑?shù)據(jù)問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Mybatis主配置文件的properties標(biāo)簽詳解
這篇文章主要介紹了Mybatis主配置文件的properties標(biāo)簽,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
詳解context root修改無(wú)效web修改項(xiàng)目路徑(eclipse)
這篇文章主要介紹了詳解context root修改無(wú)效web修改項(xiàng)目路徑(eclipse)的相關(guān)資料,需要的朋友可以參考下2017-04-04
SpringCloud基于RestTemplate微服務(wù)項(xiàng)目案例解析
這篇文章主要介紹了SpringCloud基于RestTemplate微服務(wù)項(xiàng)目案例,在寫(xiě)SpringCloud搭建微服務(wù)之前,先搭建一個(gè)不通過(guò)springcloud只通過(guò)SpringBoot和Mybatis進(jìn)行模塊之間通訊,通過(guò)一個(gè)案例給大家詳細(xì)說(shuō)明,需要的朋友可以參考下2022-05-05
java 讀取網(wǎng)頁(yè)內(nèi)容的實(shí)例詳解
這篇文章主要介紹了java 讀取網(wǎng)頁(yè)內(nèi)容的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-09-09
mybatis spring配置SqlSessionTemplate的使用方式
這篇文章主要介紹了mybatis spring配置SqlSessionTemplate的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

