`
aa860326
  • 浏览: 96420 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

无意识的递归(java.lang.StackOverflowError)

    博客分类:
  • J2SE
阅读更多

Java中的每给类从根本上都是继承自Object,标准容器类自然也不例外.因此容器类都有toString()方法.并且重写了该方法,使得它生成的String结果能够表达容器本身,以及容器所包含的对象.例如ArrayList.toString(),它会遍历ArrayList中包含的所有对象,调用没个元素的toString()方法.

===========================以上摘自(JAVA编程思想第四版13.3)=======================

import java.util.ArrayList;
import java.util.List;

public class InfiniteRecursion {

// 情形1: 

/*

 public InfiniteRecursion(){
  InfiniteRecursion object = new InfiniteRecursion();
 }

 */

// 情形2:
 /* 
 public String toString(){
  return " InfinteRecursion address: " + this + "\n";
 }
 */
 public static void main(String[] args) {
  List<InfiniteRecursion> v = new ArrayList<InfiniteRecursion>();
  for (int i = 0; i < 10; i ++){
   v.add(new InfiniteRecursion());
  }
  System.out.println(v);
 }
}

 

类似情形1和2都是递归造成了 java.lang.StackOverflowError 异常.

比如情形2: 这里发生了自动类型转换,由InfinteRecursion 类型转换成String类型.因为编译器看到一个String对象后面跟着一个"+",再后面的对象不是String,于是编译器试着将this转换成为一个String.它怎么转换呢,正是通过调用this上的toString()方法.于是就发生了递归调用. 如果你真的想要打印出对象的内存地址.应该调用Object.toString()方法,这才是负责次任务的方法.所以,你不应该使用this.而是应该调用super.toString()方法.

分享到:
评论

相关推荐

    如何解决java.lang.StackOverflowError

    在Java编程中,`java.lang.StackOverflowError` 是一个常见的运行时异常,它通常发生在程序执行过程中,当Java虚拟机(JVM)的调用栈溢出时。调用栈是每个线程用来存储方法调用信息的数据结构,当递归调用过深或者...

    java.lang.OutOfMemoryError: Java heap space 解决方法

    ### Java.lang.OutOfMemoryError: Java Heap Space 解决方法详解 在Java开发与运维中,`java.lang.OutOfMemoryError: Java heap space`是一个常见的错误信息,它表明JVM(Java虚拟机)的堆内存已经耗尽,无法再分配...

    java.lang.OutOfMemoryError处理错误

    java.lang.OutOfMemoryError处理错误 java.lang.OutOfMemoryError是Java虚拟机(JVM)中的一种常见错误,发生这种错误时,JVM将无法继续运行,程序将崩溃。这种错误的出现通常是由于Jvm的内存不足或内存泄露导致的...

    c++ 递归教程.txt

    c c++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ 递归教程.txtc++ ...

    java.lang.OutOfMemoryError 错误整理及解决办法

    Java中的`java.lang.OutOfMemoryError`是一个严重的问题,它表示Java虚拟机(JVM)在尝试分配新的对象时没有足够的内存。这个错误通常会导致应用程序崩溃。本文将深入探讨这种错误的原因、常见类型以及解决策略。 *...

    java 异常种类总结【转】.docx

    java.lang.Error 是一种错误,指的是在程序中出现严重的程序运行问题时抛出的异常。 18. java.lang.ExceptionInInitializerError 初始化程序错误 java.lang.ExceptionInInitializerError 是一种初始化程序错误,指...

    java异常类型.txt

    1. **`java.lang.Error`** - Error类是所有错误的基类,表示程序无法处理的情况,比如内存溢出等。 2. **`java.lang.StackOverflowError`** - 当程序递归过深导致栈溢出时抛出此错误。 3. **`java.lang....

    Java递归例子.doc

    Java 递归例子 Java 递归是指在 Java 编程语言中,使用递归函数来解决问题的方法。递归函数是指在函数体中调用自身的函数。Java 递归例子中提供了三个经典的递归例子:汉诺塔问题、斐波那契级数和最大公约数。 1. ...

    java异常详解

    - **`java.lang.StackOverflowError`**:当栈溢出时抛出,通常由无限递归引起。 - **`java.lang.UnsupportedClassVersionError`**:当JVM版本不支持类文件版本时抛出。 - **`java.lang.VirtualMachineError`**:当...

    java编程常见问题

    2. **java.lang.StackOverflowError**: 当递归调用过深导致堆栈溢出时,会抛出这个错误。这通常意味着一个函数或方法在调用自身时没有正确的退出条件。优化递归结构或提高JVM的堆栈大小可以避免这个问题。 3. **...

    排列与组合的Java递归实现.doc

    排列与组合的Java递归实现.doc

    易语言源码易语言背包递归源码.rar

    易语言源码易语言背包递归源码.rar 易语言源码易语言背包递归源码.rar 易语言源码易语言背包递归源码.rar 易语言源码易语言背包递归源码.rar 易语言源码易语言背包递归源码.rar 易语言源码易语言背包递归源码....

    Java__递归算法.mp4

    Java__递归算法.mp4

    常见java异常.txt

    - 类层次结构:java.lang.Object -&gt; java.lang.Throwable -&gt; java.lang.Error -&gt; java.lang.LinkageError -&gt; java.lang.IncompatibleClassChangeError - 描述:当类或接口的实现不符合其定义时,比如方法签名改变...

    Java开发常见错误及解决方案文件

    5. Java错误(java.lang.Error) - 原因分析:这类错误通常较为严重,表明Java运行时出现了不可恢复的系统错误。 - 解决方案:根据错误信息分析具体的出错原因,这可能是由于JVM本身的缺陷或其他系统级问题导致的...

    机械的递归转非递归算法.cc

    机械的递归转非递归算法.cc

    Java SE程序 递归 Java SE程序 递归

    Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE...

    递归及递归算法.ppt

    递归及递归算法.ppt

    递归删除.svn文件

    将文件放在要删除svn文件的根目录,然后双击kill-svn.bat即可。

    BOM递归展开.txt

    BOM递归展开.txt

Global site tag (gtag.js) - Google Analytics