Java 如何解决堆栈溢出错误?
我是java和bluej新手。现在,我尝试在另一本书初始化后立即生成一本新书: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
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'是什么意思?你的代码只有在编译后才会执行编译。嘿,下面的投票者,解释一下怎么样;答案有什么问题吗?嘿,下面的投票者,解释一下怎么样;答案有什么问题?