StackOverflowError при создании объекта - PullRequest
1 голос
/ 21 марта 2019

Так что это только часть моего кода, где я пытаюсь создать объект. Все, что я добавил, это тело конструктора. Это может быть что-то не так в моем коде, но я просто хотел проверить, если это как создать объект художника. Я получаю ошибку:

Exception in thread "main" java.lang.StackOverflowError 

и у цсс.Артиста. (Artist.java:26) указан много много много раз. Я просто сбит с толку Java-нуб. Любая помощь будет оценена :) 1004 *

public Artist(String name) {
      Artist artist = new Artist(name);
}

Ответы [ 4 ]

2 голосов
/ 21 марта 2019

Просто внимательно посмотрите на этот метод:

public Artist(String name) {
    Artist artist = new Artist(name);
}

Конструктор объекта thet вызывает себя. У вас есть бесконечный цикл, и StackOverflowError брошено.

1 голос
/ 21 марта 2019

Конструктор используется для создания экземпляра любого объекта.Пока вы добавляете конструктор в ваш класс [в вашем случае, параметризованный конструктор], просто используйте его для целей инициализации.

public Artist(String name) {
  this.name = name;  // you have private variable called name in your class
 }

Если вы создадите экземпляр объекта в конструкторе, он окажется в бесконечном цикле, и в конечном итоге у вас будет ошибка StackOverFlow.

1 голос
/ 21 марта 2019

Вы recursively calling the constructor без any terminating condition, который ведет infinite stack of the constructor call.

public Artist(String name) {
    Artist artist = new Artist(name);
}

Ваш new Artist(name) вызовет конструктор public Artist(String name), который снова вызовет new Artist(name), и это будет продолжаться, пока стек методов не заполнится.

0 голосов
/ 21 марта 2019

Я вижу ваш вопрос (код) в двух сторонах: создайте конструктор и создайте объект класса.В следующем примере я поместил туда класс, чтобы показать структуру кода.

//class should look like this ...
public class Artist {
    String artistName;
    //other attributes

    //create constructor
    public Artist(String name){
        this.artistName = name;    
    }
}


//Next two line can be placed in other class 
//(e.g. 1st line in class containing main function and 2st line in main function)
//create object/instance of class
Artist artist = new Artist(name);

//Use create instance of that class
System.out.println(artist.artistName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...