这可能是一个愚蠢的问题,但我厌倦了这一点。如何正确初始化类对象,以便可以访问其中的方法和变量?这是我的代码:
public class GenChunk {
Chunk c;
VBO vbo;
int worldSize = 64;
int var1 = 16; //x
int var2 = 16; //z
int var3 = 16; //y
public GenChunk(){
gen();
}
public void gen(){
c = new Chunk();
if(c.chunkChanged == false){
for(int i = 0; i < worldSize; i++){
newChunk();
}
}
}
行c = new Chunk()
导致堆栈溢出错误。我意识到原因(因为它创建了它的新实例并占用了越来越多的内存),但是只要我在构造函数中初始化它或者只是执行Chunk c = new Chunk()
,在public class GenChunk {
下面的顶部我收到另一个堆栈溢出错误!如果我没有初始化类,我会得到一个空指针(显然)。我的代码出了什么问题?我必须忽略一些东西,但我无法弄明白!
这是我的Chunk类,它有一些空方法:
public class Chunk {
public boolean chunkChanged = false;
boolean enteredGame = true;
public int chunkID = 0;
Player player;
float var1;
float var2;
float var3;
public Chunk(){
update();
}
private void update(){
setUp();
}
private void setUp(){
if(enteredGame){
new GenChunk();
}
}
private void checkChunkRebuild(int id){
}
private void rebuildOnPlayerChange(int id){
if(enteredGame && chunkChanged == true){
}
}
private float getPlayerX(){
return player.var1;
}
private float getPlayerZ(){
return player.var2;
}
private float getPlayerY(){
return player.var3;
}
}
答案 0 :(得分:1)
你的Chunk类正在创建一个新的GenChunk实例,而后者又创建了一个Chunk类的新实例,创建了一个无限循环,直到发生堆栈溢出。
private void setUp(){
if(enteredGame){
new GenChunk();
}
}
是它开始的地方,它继续在
public void gen(){
c = new Chunk();
if(c.chunkChanged == false){
for(int i = 0; i < worldSize; i++){
newChunk();
}
}
}
在GenChunk构造函数中调用。
答案 1 :(得分:0)
在GenChunk
的构造函数中,您调用gen()
,它会创建Chunk
的实例。
在Chunk
的构造函数中,您调用update()
,调用setUp()
,创建GenChunk
的实例。
此过程无限期重复。因此堆栈溢出错误。
答案 2 :(得分:0)
GenChuck
构造函数中,您创建了一个新的Chunk
(通过gen
)方法。Chunk
构造函数中,您创建了一个新的GenChunk
(通过update
)方法,enteredGame
默认为true 这是一个导致堆栈溢出的循环引用。