创建对象时出现StackOverflowError

时间:2019-03-21 08:04:23

标签: java object

所以这只是我尝试创建对象的代码的一部分。我添加的只是构造函数的主体。我的代码中可能有其他错误,但是我只是想检查一下这是否是创建艺术家对象的方法。我收到错误消息:

Exception in thread "main" java.lang.StackOverflowError 

和tss.Artist。 (Artist.java:26)列出了很多很多次。我只是一个困惑的Java新手。任何帮助将不胜感激:)

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

4 个答案:

答案 0 :(得分:2)

只需仔细研究一下该方法:

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

thet对象的构造函数正在调用自身。您有一个无限循环,并且抛出了StackOverflowError

答案 1 :(得分:1)

您是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),这将继续进行,直到方法堆栈已满。

答案 2 :(得分:1)

构造函数用于实例化任何对象。当您在类中添加一个构造函数[在您的情况下,是一个参数化的构造函数]时,只需将其用于初始化即可。

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

如果在构造函数中实例化对象,它将最终陷入永无止境的循环中,最终您将出现StackOverFlow错误。

答案 3 :(得分:0)

我看到您在两个方面询问(代码):创建构造函数和创建类的对象。在下一个示例中,我将类放在此处以显示代码的结构。

val split = builder.add(BroadCast[A](2))
val join = builder.add(Zip[B, A])
val F1: Flow[A, B, NotUsed] = Flow[A].map(f1)
val I = Flow[A].map(identity)

split ~> F1 ~> join.in1
split ~> /* I ~> */ join.in0 // do i need the commented part?