我是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上制作新书?
答案 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()'方法。