java - Java 代码中的 StackOverFlowError

标签 java stack-overflow local-variables object-initialization

我正在编写一个简单的代码,并且在第 2 行的以下代码中收到 StackOverflowError:Tmp4 t = new Tmp4 (); 如果我省略第 6 行(p 的初始化)或省略第 2 行,我不会收到错误。而且我没有进行递归调用。

我想问一下为什么会出现这样的错误。省略第 2 行或第 6 行时,它不会给出 StackOverflowError。

此外,它仅在我的系统上给出或代码有问题。

谢谢。

public class Tmp4 {
    Tmp4 t = new Tmp4 ();

    public static void main(String[] args) {
            System.out.println("main");
            Tmp4 p = new Tmp4 ();
            System.out.println("main2");

    }
}

最佳答案

通过执行 Tmp4 t = new Tmp4 (); 您正在尝试初始化其对象中同一类的对象,该对象将进行无限递归并为您提供 StackOverflow 异常。

删除此行,如下所示:

public class Tmp4 {
    /* Remove this line */
    Tmp4 t = new Tmp4 ();

    public static void main(String[] args) {
        System.out.println("main");
        Tmp4 p = new Tmp4 ();
        System.out.println("main2");
    }
}

关于java - Java 代码中的 StackOverFlowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35438320/

相关文章:

c++ - 如何使用指针从不同的函数访问局部变量?

c++ - 局部变量赋值导致Audio在JUCE中停止处理

java - 混合快速排序 + 插入排序 java.lang.StackOverflowError

linux - 64 位上的堆栈驻留缓冲区溢出?

java - 从被调用方法中获取局部变量的值而不返回

java - 如何仅将库中的特定 jar 包含到 gradle 构建中?

java - 无法安装 Android Studio(IDE 无法创建目录 Mac)

java - 通用的无锁同步

java - 如何将日期转换为毫秒

c - gdb 堆栈溢出