所以这只是我尝试创建对象的代码的一部分。我添加的只是构造函数的主体。我的代码中可能有其他错误,但是我只是想检查一下这是否是创建艺术家对象的方法。我收到错误消息:
Exception in thread "main" java.lang.StackOverflowError
和tss.Artist。 (Artist.java:26)列出了很多很多次。我只是一个困惑的Java新手。任何帮助将不胜感激:)
public Artist(String name) {
Artist artist = new Artist(name);
}
答案 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?