【问题标题】:StackOverflowError exception when calling method [duplicate]调用方法时出现 StackOverflowError 异常 [重复]
【发布时间】:2016-01-02 15:36:35
【问题描述】:

调用仅包含打印语句的方法时,我得到 StackOverflowError 溢出异常。

下面是代码

public class Dog {

    Dog dog = new Dog();

    public static void main(String args[]){
        new Dog().bark();
    }

    public void bark(){
        System.out.println("Bark");
    }

}

但是当我删除类变量(狗)时,代码工作正常。

【问题讨论】:

  • @Ramanlfc:这就是我作为社区 Wiki 回答的原因。
  • @Ramanlfc:找到了骗子——问题已关闭。请注意,鉴于原始海报的新颖性,我猜他不会知道如何用 Google 搜索这个特定问题。
  • 如果您删除了仅包含new Dog();barkmain,您将遇到同样的问题。你需要练习消除红鲱鱼的艺术。
  • @all:感谢您的帮助。

标签: java


【解决方案1】:

你的问题在这里:

public class Dog {

    Dog dog = new Dog();  //  ************** HERE ************

    public static void main(String args[]){
        new Dog().bark();
    }

    public void bark(){
        System.out.println("Bark");
    }

}

你的 Dog 类在调用new Dog() 时创建它自己的新版本,它创建它自己的版本,它创建它自己的版本,它创建它自己的版本,它创建它自己的版本,它创建自己的版本,创建自己的版本,创建自己的版本,创建自己的版本,等等......

解决方案:不要在 Dog 类中创建 new Dog(),除非在 main 方法中!请注意,在其他情况下,可以在自身内部创建对象的新实例,但在执行此操作时请始终注意可能的递归。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    相关资源
    最近更新 更多