,,Java StackOverflowError详解

,,Java StackOverflowError详解

本文主要介绍Java StackOverflowError的详细说明。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。

StackOverflowError

原因 : 函数调用栈太深了,注意代码中是否有了循环调用方法而无法退出的情况

原理

StackOverflowError是java中常见的错误:jvm运行时的数据区有一个java虚拟机堆栈,在执行java方法时,堆栈会被压下和弹回。局部变量、操作数堆栈、方法出口等。将保存在堆栈中。jvm指定了堆栈的最大深度。当堆栈深度大于指定深度时,将引发StackOverflowError错误。

典型示例:

公共类StackOverFlowDemo {

公共静态void Foo(){

foo();

}

公共静态void main(String[] args) {

foo();

}

}

今天又遇到一种情况:当两个对象相互引用时,调用toString方法会产生这个异常,因为它们会循环调用toString方法。

//书和学生互相循环引用

公共类StackOverFlowDemo {

静态类学生{

字符串名称;

书书;

公共学生(字符串名称){

this.name=name

}

//在循环中调用toString方法

@覆盖

公共字符串toString() {

返回“学生”

name='' name '\ ' '

,book=' book

'}';

}

}

静态类别手册{

字符串isbn

学生学生;

公共图书(字符串isbn,学生学生){

this.isbn=isbn

this.student=学生;

}

@覆盖

公共字符串toString() {

返回' Book{ '

isbn='' isbn '\ ' '

,学生='学生

'}';

}

}

公共静态void main(String[] args) {

学生学生=新生('张3 ');

Book book=新书(' 1111 ',学生);

student.book=书;

system . out . println(book . tostring());

}

}

出现错误:

toString()

说到toString()方法,打印一个对象时,会先调用这个对象的toString()方法,例如:

公共类toStringDemo {

静态A类{

@覆盖

公共字符串toString() {

system . out . print(' I ');

返回“”;

}

}

公共静态void main(String[] args) {

A A=new A();

System.out.println('爱你。a);

}

}

输出:

我爱你。

以上就是本文对Java StackOverflowError的详细解释。有关Java StackOverflowError的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: