当前位置: 首页 > 知识库问答 >
问题:

为什么我会得到StackOverflowError[duplicate]

裴卓君
2023-03-14

这是我的父类,有两个名为ToString的方法。带有参数的那个在子类中使用。

public abstract class Army {
    private String commander;
    private int soldiers;
    private int guns;
    private int horses;
    private int officers;
    // getters & setters
    public Army(){
    }

    @Override
    public String toString() {
        return "Army{" +
                "commander='" + commander + '\'' +
                ", soldiers=" + soldiers +
                ", guns=" + guns +
                ", horses=" + horses +
                ", officers=" + officers +
                '}';
    }

    public String toString(String type) {
        var result = toString();
        return result.replace("Army", type);
    }
}

这是我的子类,在子类的ToString方法中,我使用父类的ToString(String type)方法:

public class PanzerArmy extends Army {
    private String tanks = "tanks";

    public String getTanks() {
        return tanks;
    }

    public void setTanks(String tanks) {
        this.tanks = tanks;
    }

    @Override
    public String toString() {
        return super.toString("PanzerArmy") +
                " tanks='" + tanks + '\'' +
                '}';
    }
}

当我尝试显示子类的对象时,我得到以下错误:

线程“main”java.lang.StackOverflowError中出现异常

共有1个答案

鲁博瀚
2023-03-14

面板army.toString()中,您调用army.toString(String),后者又调用toString()。您可能希望army.toString()在此处执行,但由于您在PanzerArmy中重写了它(并且当前对象的类型为PanzerArmy),因此它将调用PanzerArmy.toString()。..它将调用army.toString(String)并以一个永无止境的递归重新开始整个jazz。最终,JDK决定它已经得到了足够的这些和bails。

更好的解决方案是使army中的toString()抽象,并且只实现toString(String)

或者,您可以使用getClass().getSimPlename()这样的东西来获取当前类的短名称,并立即使用它,而不是为每个子类调整toString()

 类似资料:
  • 问题内容: public class Category { 在正在生成。 问题答案: 当您执行时,您称呼孩子们的。这里没有问题,只不过您在这里调用了父对象。这将称呼孩子,等等。 不错的无限循环。 摆脱它的最好方法是将您的方法更改为: 这样,您将不打印parentCategory,而仅显示其名称,不显示无限循环,不显示StackOverflowError。 编辑: 正如博洛在下面说的那样,您将需要检

  • 很抱歉,我对Java知之甚少。我得到了这个代码来接管。基本上,我在 当我运行代码时。 下面是解析XML的块 这是Improts,不确定是否需要这样做 这是XML文件

  • 我是新手,但我正在编写一个应用程序,我不断收到这个错误,导致应用程序在启动时崩溃。 导致它的代码在下面的类中,在问题的行旁边会有一个这里的注释。 这就是我调用方法的代码。 这是堆栈跟踪。 谢谢你的帮助。

  • 请问为什么第13行的错误是未报告的异常,必须捕获pr声明要抛出

  • 前段时间,我设置了一个带有一些子域的站点(,...) 为什么辅助DNS没有给出子域的答案?它给出了像“test.example.com”这样的旧子域的答案。我必须如何解释SOA响应?什么意思?

  • 我还尝试了,,JMeter获得了多达8000个示例,最大时间12000ms(超时30s),并给出了错误。在拒绝之前,它至少应该排队10,000个连接。