创建单例管理器时,无法对非静态字段进行静态引用

时间:2013-02-03 04:33:50

标签: java eclipse

public class GameManager {
    private static GameManager INSTANCE;

    private final int INITIAL_SCORE = 0;

    private int mCurrentScore;

    GameManager(){
    }

    public static GameManager getInstance(){
        if(INSTANCE == null){
            INSTANCE = new GameManager();
        }
        return INSTANCE;
    }

    public int getCurrentScore(){
        return mCurrentScore;
    }

    public void incrementScore(int pIncrementBy){
        mCurrentScore += pIncrementBy;
    }

    public void resetGame(){
        mCurrentScore = GameManager.INITIAL_SCORE;
    }
}

我在eclipse中运行上面的代码。 我想知道为什么当将GameManager.INITIAL_SCORE的值分配给mCurrentScore时,eclipse告诉我“无法对非静态字段GameManager.INITIAL_SCORE进行静态引用”。 mCurrentScore不是静态的,是吗?如果mCurrentScore不是静态的,为什么我要将INITIAL_SCORE声明为静态?

2 个答案:

答案 0 :(得分:0)

private final int INITIAL_SCORE = 0;

不是static字段,它是实例字段(与mCurrentScore相同)。你需要返回INITIAL_SCORE;

您无法使用班级名称访问它。

答案 1 :(得分:0)

当您使用类名称为变量添加前缀时,您告诉Java变量是静态的。由于变量不是静态的,因此会给出错误。代码应为:

public void resetGame(){
    mCurrentScore = INITIAL_SCORE;
}