本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。