初始化类和堆栈溢出错误的正确方法

时间:2013-02-07 23:17:23

标签: java class nullpointerexception stack-overflow

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

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

}

3 个答案:

答案 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

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