JAVA中StackOverflowError錯誤的解決
StackOverflowError
原因
根據(jù)名字的意思可以大致知道它是跟函數(shù)棧有關(guān)的錯誤,就是函數(shù)棧調(diào)用太深了,可能是代碼中有了循環(huán)調(diào)用方法而無法退出的情況。而像while這樣的死循環(huán),不會報錯,程序會一直執(zhí)行下去,占用內(nèi)存。
原理
StackOverflowError 是一個java中常出現(xiàn)的錯誤:在jvm運行時的數(shù)據(jù)區(qū)域中有一個java虛擬機棧,當執(zhí)行java方法時會進行壓棧彈棧的操作。在棧中會保存局部變量,操作數(shù)棧,方法出口等等。jvm規(guī)定了棧的最大深度,當執(zhí)行時棧的深度大于了規(guī)定的深度,就會拋出StackOverflowError錯誤。
所以當你在一個函數(shù)再調(diào)用此函數(shù)時,而忘記設(shè)置出口就會出現(xiàn)這個錯誤。
今天我遇到的問題就是我想覆寫hash函數(shù),想要在此函數(shù)調(diào)用的結(jié)果是原來的hash函數(shù)調(diào)用的結(jié)果再隨便加一個字符串,結(jié)果就忽視了函數(shù)會一直調(diào)用下去,相當于沒有設(shè)置遞歸函數(shù)的出口,所以導(dǎo)致了StackOverflowError錯誤。
這是當時我的代碼
發(fā)生的錯誤
當我把函數(shù)名字改一改就能正常運行。還有原來的一些設(shè)置圖書和學(xué)生類時,這兩個類中都覆寫了toString方法,這兩個類也可以互相調(diào)用,當最后調(diào)用tostring時也會發(fā)生錯誤。
下面是我在網(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ā)生了如下錯誤
到此這篇關(guān)于JAVA中StackOverflowError錯誤的解決的文章就介紹到這了,更多相關(guān)JAVA StackOverflowError錯誤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用動態(tài)規(guī)劃算法思想解決背包問題
背包問題(Knapsack problem)是一種組合優(yōu)化的NP完全問題。問題可以描述為:給定一組物品,每種物品都有自己的重量和價格,在限定的總重量內(nèi),我們?nèi)绾芜x擇,才能使得物品的總價格最高2022-04-04完美解決MybatisPlus插件分頁查詢不起作用總是查詢?nèi)繑?shù)據(jù)問題
這篇文章主要介紹了解決MybatisPlus插件分頁查詢不起作用總是查詢?nèi)繑?shù)據(jù)問題,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08詳解context root修改無效web修改項目路徑(eclipse)
這篇文章主要介紹了詳解context root修改無效web修改項目路徑(eclipse)的相關(guān)資料,需要的朋友可以參考下2017-04-04SpringCloud基于RestTemplate微服務(wù)項目案例解析
這篇文章主要介紹了SpringCloud基于RestTemplate微服務(wù)項目案例,在寫SpringCloud搭建微服務(wù)之前,先搭建一個不通過springcloud只通過SpringBoot和Mybatis進行模塊之間通訊,通過一個案例給大家詳細說明,需要的朋友可以參考下2022-05-05mybatis spring配置SqlSessionTemplate的使用方式
這篇文章主要介紹了mybatis spring配置SqlSessionTemplate的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08