Java乘法静态字段?

时间:2013-12-18 15:28:32

标签: java multiplication

这可能是stackoverflow上最明显的问题。请帮忙!这段代码有什么问题?

public class LevelOne extends Move {
    static int block1x = 3;
    static int block1y = 1;
    static int block2x = 3;
    static int block2y = 2;
    static int block3x = 3;
    static int block3y = 3;
    block1x *= 32;
    block1y *= 32;
    block2x *= 32;
    block2y *= 32;
    block3x *= 32;
    block3y *= 32;
}

在第7行它说它预期{而不是; 在第14行它实际上说它期望}完成classbody。为什么???

2 个答案:

答案 0 :(得分:4)

这样做没有错:

public class LevelOne extends Move {
    static int block1x = 3*32;
    static int block1y = 1*32;
    static int block2x = 3*32;
    static int block2y = 2*32;
    static int block3x = 3*32;
    static int block3y = 3*32;
}

将在编译时计算实际值96,32,64等。您最好定义static final int multipier = 32常量,以便将每个字段定义为static int block1x = 3 * multiplier,依此类推。您的代码将更易于阅读和更易于维护。

那应该没问题因为那些是static字段。对于非static字段的一般情况,此部分应位于类的方法或构造函数中:

block1x *= 32;
block1y *= 32;
block2x *= 32;
block2y *= 32;
block3x *= 32;
block3y *= 32;

现在它们在类声明中,我们可以在其中定义字段,方法和构造函数(以及其他内容)。该空间用于定义类具有的内容。要定义特定代码,请使用方法或构造函数。

答案 1 :(得分:2)

初始化部分应该在静态部分或静态方法中:

public class LevelOne extends Move {
    static int block1x = 3;
    static int block1y = 1;
    static int block2x = 3;
    static int block2y = 2;
    static int block3x = 3;
    static int block3y = 3;

    // will be called right after the static variables are initialized
    static{
        block1x *= 32;
        block1y *= 32;
        block2x *= 32;
        block2y *= 32;
        block3x *= 32;
        block3y *= 32;
    }
}

或者您可以将这些字段声明为实例字段(与上面相同,只需删除static字)。