久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

JAVA中StackOverflowError錯誤的解決

瀏覽:89日期:2022-08-14 09:47:40
StackOverflowError 原因

根據(jù)名字的意思可以大致知道它是跟函數(shù)棧有關的錯誤,就是函數(shù)棧調用太深了,可能是代碼中有了循環(huán)調用方法而無法退出的情況。而像while這樣的死循環(huán),不會報錯,程序會一直執(zhí)行下去,占用內存。

原理

StackOverflowError 是一個java中常出現(xiàn)的錯誤:在jvm運行時的數(shù)據(jù)區(qū)域中有一個java虛擬機棧,當執(zhí)行java方法時會進行壓棧彈棧的操作。在棧中會保存局部變量,操作數(shù)棧,方法出口等等。jvm規(guī)定了棧的最大深度,當執(zhí)行時棧的深度大于了規(guī)定的深度,就會拋出StackOverflowError錯誤。

所以當你在一個函數(shù)再調用此函數(shù)時,而忘記設置出口就會出現(xiàn)這個錯誤。

今天我遇到的問題就是我想覆寫hash函數(shù),想要在此函數(shù)調用的結果是原來的hash函數(shù)調用的結果再隨便加一個字符串,結果就忽視了函數(shù)會一直調用下去,相當于沒有設置遞歸函數(shù)的出口,所以導致了StackOverflowError錯誤。

這是當時我的代碼

JAVA中StackOverflowError錯誤的解決

發(fā)生的錯誤

JAVA中StackOverflowError錯誤的解決

當我把函數(shù)名字改一改就能正常運行。還有原來的一些設置圖書和學生類時,這兩個類中都覆寫了toString方法,這兩個類也可以互相調用,當最后調用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)調用toString方法@Overridepublic 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;} @Overridepublic 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ā)生了如下錯誤

JAVA中StackOverflowError錯誤的解決

到此這篇關于JAVA中StackOverflowError錯誤的解決的文章就介紹到這了,更多相關JAVA StackOverflowError錯誤內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關文章:
主站蜘蛛池模板: 泗洪县| 乐业县| 沿河| 牙克石市| 宣恩县| 长岛县| 和龙市| 旺苍县| 邵武市| 七台河市| 格尔木市| 高雄县| 综艺| 台前县| 乌什县| 平度市| 渭源县| 宿迁市| 当阳市| 宁强县| 绥中县| 汕头市| 江孜县| 布尔津县| 乐清市| 淮安市| 濮阳县| 富锦市| 泗阳县| 休宁县| 正蓝旗| 东丰县| 灵武市| 蕲春县| 塔河县| 长顺县| 沈丘县| 阿拉善右旗| 扎兰屯市| 英德市| 太谷县|