iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java StackOverflowError详解
  • 800
分享到

Java StackOverflowError详解

2024-04-02 19:04:59 800人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

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

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方法
        @Override
        public 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;
        }

        @Override
        public 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());
    }

}

出现的错误:

stackoverflow

toString()

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


public class toStringDemo {

    static class A{
        @Override
        public 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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java StackOverflowError详解

本文链接: https://www.lsjlt.com/news/132551.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java StackOverflowError详解
    StackOverflowError 原因 : 函数调用栈太深了,注意代码中是否有了循环调用方法而无法退出的情况 原理 StackOverflowError 是一个java中常出现的...
    99+
    2024-04-02
  • JAVA中StackOverflowError错误的解决
    StackOverflowError    原因     根据名字的意思可以大致知道它是跟函数栈有关的错误,就是函数栈调用太深了,可能是代码中有了循环调用方法而无法退出的情况。而像w...
    99+
    2024-04-02
  • Java中的StackOverflowError错误问题怎么解决
    这篇文章主要介绍了Java中的StackOverflowError错误问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中的StackOverflowError错误问题怎么解决文章都会有所收获,...
    99+
    2023-07-02
  • Java中的StackOverflowError错误问题及解决方法
    目录StackOverflowError简介Stack Frames和StackOverflowerError的发生方式StackOverflowerError正在运行解决Stack...
    99+
    2024-04-02
  • JPA @ManyToMany 报错StackOverflowError的解决
    目录JPA @ManyToMany 报错StackOverflowErrorSpringJPA批量删除引起的StackOverFlow解决方法JPA @ManyToMany 报错St...
    99+
    2024-04-02
  • Java注解详解
    目录 一、发现注解二、注解是什么1. 注解的本质2. 注解是针对Java编译器的说明 三、为什么要使用注解四、Java中常用的注解4.1 基础注解(spring-context、spring-we...
    99+
    2023-08-22
    java spring 软件测试
  • Java Map详解
    Java中的Map接口是一个键值对的映射表,它的实现类有HashMap、TreeMap、LinkedHashMap等。Map接口中包...
    99+
    2023-09-09
    java
  • Java IO详解
    一、I/O简介 IO即Input和Output,即输入和输出。这里的输入和输出都是相对于内存来说的,具体见下图。 InputStream/Reader:所有输入流的基类,前者是字节输入流,后者是字符输入流。 OutputStream/Wr...
    99+
    2023-08-20
    java
  • java -D详解
    官方文档对 -D 有明确的解释,具体看 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html 简单解释一下 首先,...
    99+
    2023-08-31
    java
  • Java webservice详解
    Java Web服务是一种使用Java语言编写的服务器端应用程序,用于提供网络服务的一种技术。它可以使用标准的HTTP协议与客户端进...
    99+
    2023-09-13
    Java
  • java static 详解
    1、static目的  java中的static关键字主要用于内存管理。 2、static范围 使用范围:java static关键字可以用在变量、方法、代码块和嵌套类伤。 作用范围:static关键字属于类,而不是类的实例。 静态(sta...
    99+
    2023-10-25
    java static
  • Java-Stream详解
    Stream 定义 Stream是Java 8新增的接口,Stream可以认为是一个高级版本的 Iterator。 Stream跟Iterator的差别 名称含义无存储Stream是基于数据源的对象,...
    99+
    2023-09-13
    java 开发语言
  • Java socket详解
    Java中的Socket是一种用于网络通信的机制,可以实现不同计算机上的进程之间的通信。Socket本质上是一种封装了网络协议的编程...
    99+
    2023-09-15
    Java
  • Java——RMI详解
    目录 1、概述1.1、简介1.2、原理1.3、组成1.4、数据传递 2、示例2.1、创建接口2.2、实现接口类2.3、创建服务端2.4、客户端调用远程对象2.5、运行结果 3、其它...
    99+
    2023-09-21
    java rmi
  • java解析XML详解
    目录XML的主要用途对比HTML关于XML文件的解析?JDK自带的一套解析总结XML的主要用途 --数据存储和数据描述 --是一个优良的配置文件 --相当于...
    99+
    2024-04-02
  • Java注解Annotaton详解
    目录1、三种基本的Annotaton@Override解读细节@Deprecated解读效果细节可以修饰方法,类,包,参数等等@SuppressWarnings解读效果细节元注解Re...
    99+
    2024-04-02
  • Java多态详解
    目录 1. 基本介绍1.1 多态的概念1.2 多态的具体体现1.3 入门案例 2. 多态的转型2.1 向上转型2.2 向下转型2.3 代码示例2.4 转型的异常2.4.1 类型转换异常2....
    99+
    2023-10-03
    java
  • Java Spring AOP详解
    目录1.什么是AOP?2.AOP在Spring中的作用3.使用Spring实现AOP方式一:使用Spring的接口方法二:使用自定义类来实现方法三:使用注解实现总结1.什么是AOP?...
    99+
    2024-04-02
  • Java BeanUtils.copyProperties的详解
    场景 开发中经常遇到,把父类的属性拷贝到子类中。通常有2种方法: 1、一个一个set 2、用BeanUtils.copyProperties 很显然BeanUtils更加方便,也美观...
    99+
    2024-04-02
  • Java Stream流详解
    本文目录 学习目标中间操作Filter(过滤)Map(转换)Sorted(排序)Distinct(去重)Limit(限制)Skip(跳过)Peek(展示) 终止操作forEach(循环)Collect(收集)Count(计数)R...
    99+
    2023-08-16
    java 开发语言 stream流
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作