[英]StackOverflow when initializing new object
我不知道为什么会这样,它似乎在创建新对象和初始化它之间处于不断循环中
public class App {
Character hero = new Character();
charCreation charCreation = new charCreation();
public static void main(String [] args){
App app = new App();
app.run();
}
void run(){
charCreation.charCreate();
}
}
因此,这里App创建了一个新的charCreation对象,这是
import java.util.Scanner;
class charCreation extends App {
Scanner skan = new Scanner(System.in);
protected void charCreate(){
......
这是错误
线程“主”中的异常java.lang.StackOverflowError
在charCreation。(charCreation.java:3)
在App。(App.java:5)
在charCreation。(charCreation.java:3)
在App。(App.java:5)
......
它会一直持续下去
当您创建CharCreation
的实例(为您固定的CamelCase)时,它还将初始化从其超类App
继承的所有内容(调用超类构造函数,初始化所有实例字段等)。 其中一部分是创建CharCreation
另一个实例(以及Character
的实例)。
无限循环。
也许您想从App
删除该实例字段,并使其在run
时成为局部变量。
charCreation
类扩展了App
因此要创建它,需要调用超类的构造函数( App
)。 为了构建App
超,领域的App
需要被costructed,包括一个new charCreation()
-因此它循环。
您需要将新charCreation
对象的创建与App
实例的创建分离。
您有一个App
类,其字段类型为CharCreation
。
CharCreation
扩展了App
,因此,当您初始化CharCreation
对象时,它将初始化字段charCreation
。 因此,当初始化charCreation
字段时,它将初始化一个新的CharCreation
对象,依此类推。
从CharCreation
,这是一个必须解决的设计问题,我认为CharCreation
类不应扩展App
类,而charCreate
应该返回Character
。
public class App {
Character hero = new Character();
CharCreation charCreation = new charCreation();
void run(){
hero = charCreation.charCreate();
}
}
public class CharCreation {
public Character charCreate() {
/* creates and returns the hero */
}
}
边注:
CharCreation
而不是charCreation
。 Character
来命名一个类,它是JDK( char
的对象对应物)中已经存在的一个类。 循环对象的创建导致堆栈溢出。
应用程序对象创建charCreation实例对象
charCreation对象还将创建应用程序对象,因为它是超类。[超类对象在子级之前实例化]
找到循环,继续...直到stackoverflow。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.