Java StackOverflowError詳解
原因 : 函數(shù)調(diào)用棧太深了,注意代碼中是否有了循環(huán)調(diào)用方法而無法退出的情況
原理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ò)誤。
典型的例子:
public class StackOverFlowDemo { public static void Foo(){Foo(); } public static void main(String[] args) {Foo(); }}
今天我遇見了另外一種情況:當(dāng)兩個(gè)對(duì)象相互引用,在調(diào)用toString方法時(shí)會(huì)產(chǎn)生這個(gè)異常,因?yàn)樗鼈儠?huì)循環(huán)調(diào)用toString方法。
//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方法@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()); }}
出現(xiàn)的錯(cuò)誤:
說到toString()方法,在打印一個(gè)對(duì)象時(shí),會(huì)先調(diào)用這個(gè)對(duì)象的toString()方法,例如:
public class toStringDemo { static class A{@Overridepublic String toString() { System.out.print('I '); return '';} } public static void main(String[] args) {A a=new A();System.out.println('love you.'+a); }}
會(huì)輸出:
I love you.
到此這篇關(guān)于Java StackOverflowError詳解的文章就介紹到這了,更多相關(guān)Java StackOverflowError內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. HTML實(shí)現(xiàn)title 屬性換行小技巧2. ASP.NET MVC實(shí)現(xiàn)單個(gè)圖片上傳、限制圖片格式與大小并在服務(wù)端裁剪圖片3. Python CSS選擇器爬取京東網(wǎng)商品信息過程解析4. JAVA實(shí)現(xiàn)PDF轉(zhuǎn)HTML文檔的示例代碼5. js中textContent、innerText和innerHTML的用法以及區(qū)別6. python 利用 PIL 將數(shù)組值轉(zhuǎn)成圖片的實(shí)現(xiàn)7. Python3 assert斷言實(shí)現(xiàn)原理解析8. Java 獲取 jar包以外的資源操作9. python基于tkinter制作無損音樂下載工具(附源碼)10. python中的裝飾器該如何使用
