0

这可能是一个愚蠢的问题,但我已经厌倦了。如何正确初始化类对象,以便访问其中的方法和变量?这是我的代码:

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;
}

}

4

3 回答 3

1

您的 Chunk 类正在创建 GenChunk 的新实例,而 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 构造函数中调用。

于 2013-02-07T23:33:07.720 回答
0

GenChunk的构造函数中,您调用gen(),它会创建一个Chunk.

Chunk的构造函数中,您调用update(),它调用setUp()创建GenChunk.

这个过程无限重复。因此堆栈溢出错误。

于 2013-02-07T23:29:22.087 回答
0
  • 在您的GenChuck构造函数中,您创建一个新的Chunk(通过gen)方法。
  • 在您的Chunk构造函数中,您创建一个新的GenChunk(通过update)方法,enteredGame 默认为 true

这是导致堆栈溢出的循环引用。

于 2013-02-07T23:29:37.703 回答