首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个Java代码会产生堆栈溢出错误?

为什么这个Java代码会产生堆栈溢出错误?
EN

Stack Overflow用户
提问于 2019-02-19 04:16:46
回答 2查看 0关注 0票数 0

执行时,下面的代码会产生堆栈溢出错误。但是,如果删除其中之一

  • static final GenerateStackOverflow E1 = new GenerateStackOverflow("value1");
  • final GenerateStackOverflow E2 = new GenerateStackOverflow("value2");

它在没有堆栈溢出错误的情况下运行。如果我有上面的两行,怎么会出现堆栈溢出错误,但如果只有一行是在类中,则没有错误?

代码语言:javascript
复制
public class GenerateStackOverflow {

    private final String value; 

    static final GenerateStackOverflow E1 = new GenerateStackOverflow("value1");
    final GenerateStackOverflow E2 = new GenerateStackOverflow("value2");


    public GenerateStackOverflow(String value) {
        System.out.println("GenerateStackOverflow.GenerateStackOverflow()");
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public static void main(String[] args) {
        GenerateStackOverflow.class.getName();
    }
}
EN

Stack Overflow用户

发布于 2019-02-19 14:09:51

构造函数调用自身:

代码语言:javascript
复制
final GenerateStackOverflow E2 = new GenerateStackOverflow("value2");

因此,要构造一个实例,您需要构造一个需要构造实例的实例,等等。

你的程序的main方法加载了这个类。并且有一个静态字段调用类的构造函数,这会创建堆栈溢出。因此,删除静态变量会隐藏问题,因为永远不会调用构造函数。删除非静态变量会完全删除递归调用,从而修复了probem。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档