我不知道为什么会发生这种情况,它似乎在创建新对象和初始化对象之间处于一个恒定的循环中。
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(){
......这是一个错误
线程"main“java.lang.StackOverflowError中的异常 在charCreation.(charCreation.java:3) 应用程序(App.java:5) 在charCreation.(charCreation.java:3) 应用程序(App.java:5) .
它还在不停地
发布于 2015-09-03 08:38:46
当您创建CharCreation (为您固定的CamelCase )实例时,它还将初始化从超类App继承的所有东西(调用超类构造函数、初始化所有实例字段等)。其中一部分是创建CharCreation的另一个实例(以及Character的一个实例)。
无限循环。
也许您希望从App中删除该实例字段,并将其改为run中的局部变量。
发布于 2015-09-03 08:39:49
charCreation类扩展了App,因此要创建它,需要调用超类(App)的构造函数。要构造App超类,需要构造App的字段,包括一个new charCreation(),所以它会循环。
您需要将新charCreation对象的创建与App实例的创建分离开来。
发布于 2015-09-03 08:39:10
您有一个App类,其字段类型为CharCreation。
CharCreation扩展了App,所以当您初始化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的对象对应项)。https://stackoverflow.com/questions/32370761
复制相似问题