调用方法

时间:2016-01-02 15:36:35

标签: java

调用只包含print语句的方法时,我收到了StackOverflowError溢出异常。

以下是代码

public class Dog {

    Dog dog = new Dog();

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

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

}

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

1 个答案:

答案 0 :(得分:3)

你的问题在这里:

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()!请注意,在其他时候可以在其自身内创建对象的新实例,但在执行此操作时始终注意可能的递归。