如何解决Stackoverflow错误?

时间:2013-11-11 15:05:58

标签: java bluej

我是java和bluej的新手。现在我尝试在另一本书初始化后立即生成一本新书:

 public Book(String bookAuthor, String bookTitle)
    {
        author = bookAuthor;
        title = bookTitle;
        generatebook2();
    }
    public void generatebook2(){
        Book book2 = new Book("Jumbo","Fary");
    }

不知怎的,这不会工作,我得到一个错误:

 Stackoverflow error: null

我错了什么或如何在onfly上制作新书?

4 个答案:

答案 0 :(得分:2)

您正在以递归方式调用Book构造函数,因为您收到错误。 也许你可以用不同的参数编写一个新的构造函数,并在第一个构造函数中使用它,假设你不想从外面创建两本书。

public Book(String bookAuthor, String bookTitle)
{
    author = bookAuthor;
    title = bookTitle;
    generatebook2();
}
public Book(){
}


public void generatebook2(){
    Book book2 = new Book();
    book2.setAuthor("Jumbo");
    book2.setTitle("Fary");
}

答案 1 :(得分:1)

如果我们展开方法generatebook 2

,这个错误可能会更明显
public Book(String bookAuthor, String bookTitle)
    {
        author = bookAuthor;
        title = bookTitle;
        Book book2 = new Book("Jumbo","Fary"); //<-- unrolled generatebook2()
    }

每本书的构造函数都会自称,并没有尽头。 book2似乎从来没有做任何事情,因此该行当前没有任何效果,可以删除

答案 2 :(得分:1)

你创造的是无限循环。在Book构造函数中,您正在创建一个新的Book对象,该对象调用该新对象的构造函数,该对象会创建一个新的Book对象......等等等等。

如果您想在第一个之后立即创建另一个Book对象,则需要从对象外部调用该对象,无论您在何处创建该图书。

这样的事情:

Book book1 = new Book("John Smith", "Book1");
Book book2 = new Book("John Smith", "Book2");

并删除构造函数中的generateBook2

答案 3 :(得分:0)

在'Book'构造函数中,您调用方法'generatebook2()' 'generatebook2()'方法调用'Book'构造函数。然后一次又一次地调用'generatebook2()'方法。直到你得到一个Stackoverflow异常(从方法调用堆栈已满)。

只需从构造函数中删除'generatemethod2()'调用即可。试试这个:

public Book(String bookAuthor, String bookTitle)
{
    author = bookAuthor;
    title = bookTitle;
}

public Book generatebook2(){
    Book book2 = new Book("Jumbo","Fary");
    return book2;
}

如果你想创建一本新书,那么你既可以调用'Book'类的构造函数,也可以从book对象中调用'generatebook2()'方法。