这可能是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。为什么???
答案 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
字)。