Java 如何解决堆栈溢出错误?

Java 如何解决堆栈溢出错误?,java,bluej,Java,Bluej,我是java和bluej新手。现在,我尝试在另一本书初始化后立即生成一本新书: public Book(String bookAuthor, String bookTitle) { author = bookAuthor; title = bookTitle; generatebook2(); } public void generatebook2(){ Book book2 = new Book("Jum

我是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

我做错了什么,或者如何在运行中生成一本新书?

您正在递归调用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");
}

您正在递归调用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");
}

在“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()”。

在“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()”。

如果展开方法generatebook2,此错误可能更明显

public Book(String bookAuthor, String bookTitle)
    {
        author = bookAuthor;
        title = bookTitle;
        Book book2 = new Book("Jumbo","Fary"); //<-- unrolled generatebook2()
    }
公共图书(字符串图书作者,字符串图书标题)
{
作者=书籍作者;
书名=书名;

bookbook2=新书(“Jumbo”,“Fary”);//如果我们展开方法generateBook2,这个错误可能会更明显

public Book(String bookAuthor, String bookTitle)
    {
        author = bookAuthor;
        title = bookTitle;
        Book book2 = new Book("Jumbo","Fary"); //<-- unrolled generatebook2()
    }
公共图书(字符串图书作者,字符串图书标题)
{
作者=书籍作者;
书名=书名;

Book book2=新书(“Jumbo”,“Fary”);//您所创建的是一个无限循环。在
Book
构造函数中,您正在创建一个新的
Book
对象,该对象调用该新对象的构造函数,该构造函数创建一个新的
Book
对象……等等

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

大概是这样的:

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

然后删除构造函数中的
generateBook2

您所创建的是一个无限循环。在
书籍
构造函数中,您正在创建一个新的
书籍
对象,该对象调用该新对象的构造函数,该构造函数创建一个新的
书籍
对象…等等

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

大概是这样的:

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

然后删除构造函数中的
generateBook2

您正在生成一本新书,这本新书正在生成一本新书……等等。假设此代码运行完成,您将拥有多少本书?您正在生成一本新书,这本新书正在生成一本新书……等等假设此代码运行完成,您将有多少本书?在调用第一本书的方法中,创建一本新的。在调用第一本书的方法中,创建一本新的。@JohnSmith只需删除“generatebook2()'从'Book'构造函数调用。@JohnSmith不要求java创建无限多的书籍。为什么要用书籍构造函数创建一本新书?java是否可能在编译后立即生成一本新书?@JohnSmith我不理解你的问题。你说的'after compiled'是什么意思?你的代码只有在编译后才会执行正在编译。@JohnSmith只需删除“generatebook2()'从'Book'构造函数调用。@JohnSmith不要求java创建无限多的书籍。为什么要用书籍构造函数创建一本新书?java是否可能在编译后立即生成一本新书?@JohnSmith我不理解你的问题。你说的'after compiled'是什么意思?你的代码只有在编译后才会执行编译。嘿,下面的投票者,解释一下怎么样;答案有什么问题吗?嘿,下面的投票者,解释一下怎么样;答案有什么问题?