我不知道为什么会发生这种情况,它似乎是在创建新对象和初始化它之间的一个恒定循环
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。(App.java:5)
在charCreation。(charCreation.java:3)
在App。(App.java:5)
...
它继续下去
答案 0 :(得分:4)
当您创建CharCreation
的实例(为您修复CamelCase)时,它还将初始化从其超类App
继承的所有内容(调用超类构造函数,初始化所有实例字段等)。其中一部分是创建CharCreation
的另一个实例(以及Character
的实例)。
无限循环。
也许您要从App
中删除该实例字段,并将其变为run
中的局部变量。
答案 1 :(得分:2)
charCreation
类扩展App
所以要创建它需要调用超类(App
)的构造函数。要构造App
超类,App
的字段需要进行构造,包括new charCreation()
- 因此它会循环。
您需要从创建charCreation
实例中分离新App
对象的创建。
答案 2 :(得分:1)
您有一个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
的对象)。答案 3 :(得分:0)
循环对象创建导致堆栈溢出。
App对象创建charCreation实例对象
charCreation对象也将创建App Object,因为它是超类。[超类对象在子节点之前实例化]
找到循环,继续...直到堆栈溢出。