2013-11-11 5 views
0

Im новый для java и bluej. Теперь я пытался сформировать новую книгу сразу после другой книги инициализируется:Как решить ошибку Stackoverflow?

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

Вы создаете новую книгу, которая генерирует новую книгу, которая генерирует новую книгу ... ect ect ect –

+0

Предполагая, что этот код прошел до конца, сколько у вас книг? –

ответ

1

То, что вы создали, представляет собой бесконечный цикл. В вашем конструкторе Book вы создаете новый объект Book, который вызывает конструктор нового объекта, который создает новый объект Book ... и так далее и так далее.

Если вы хотите создать еще один объект Book сразу же после первого, вам нужно будет вызвать это извне объекта, откуда бы вы ни создали книгу в первую очередь.

Что-то вроде этого:

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

И удалить generateBook2 в конструкторе.

+0

Поздно к партии снова. Набрав на моем телефоне ... –

+0

Эй, давай, как насчет объяснения; что случилось с ответом? –

2

Вы вызываете конструктор книги рекурсивно, из-за которого вы получаете ошибку. Может быть, вы можете написать новый конструктор с разными аргументами и использовать его из первого конструктора, предполагая, что вы не хотите создавать две книги извне.

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"); 
} 
+0

Как избежать этой ошибки? –

+1

в методе, где вы называете первую книгу, создайте новую. – RamonBoza

0

В конструкторе «Книга» вы вызываете метод «generatebook2()».
Метод «generatebook2()» вызывает конструктор «Книга». Затем они снова и снова вызывают метод generatebook2(). Пока вы не получите исключение Stackoverflow (стек заполнен вызовами метода).

Просто удалите вызов 'generatemethod2() из конструктора. Попробуйте это:

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

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

Если вы хотите создать новую книгу, то вы можете вызвать конструктор класса «книга», или вызвать метод «generatebook2()» из книги объекта.

+0

sidgate уже сказал, что – RamonBoza

+0

Так как же я заявляю эту ошибку? –

+0

@JohnSmith просто удаляет вызов generatebook2() из конструктора «Книга». – m1o2

1

Эта ошибка может быть более очевидным, если раскатать метод generatebook 2

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

Каждая книга конструктор, называет себя, не видно конца. book2 никогда ничего не делает, так что линия ничего не действует в настоящее время и может быть удалена

Смежные вопросы