国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

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

Java StackOverflowError詳解

瀏覽:2日期:2023-12-06 15:50:34
StackOverflowError

原因 : 函數調用棧太深了,注意代碼中是否有了循環調用方法而無法退出的情況

原理

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

典型的例子:

public class StackOverFlowDemo { public static void Foo(){Foo(); } public static void main(String[] args) {Foo(); }}

今天我遇見了另外一種情況:當兩個對象相互引用,在調用toString方法時會產生這個異常,因為它們會循環調用toString方法。

//book和student相互循環引用public class StackOverFlowDemo { static class Student{String name;Book book;public Student(String name) { this.name = name;}//循環調用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()); }}

出現的錯誤:

Java StackOverflowError詳解

toString()

說到toString()方法,在打印一個對象時,會先調用這個對象的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); }}

會輸出:

I love you.

到此這篇關于Java StackOverflowError詳解的文章就介紹到這了,更多相關Java StackOverflowError內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 宁波市| 招远市| 弥勒县| 集安市| 酉阳| 喀喇| 偏关县| 樟树市| 曲麻莱县| 安仁县| 琼海市| 伽师县| 务川| 信阳市| 名山县| 翁牛特旗| 浦东新区| 绩溪县| 固原市| 广平县| 万荣县| 宝坻区| 宁明县| 八宿县| 岚皋县| 筠连县| 什邡市| 乌什县| 万山特区| 灵川县| 汝州市| 贡山| 沙湾县| 凌海市| 雷山县| 赣州市| 万盛区| 溆浦县| 惠东县| 靖安县| 许昌县|