我有一个普通的Java代码,只计算一个x坐标,但它只是0;
private static final int startX = (Level.WIDTH / 2) - (Block.LENGTH * (Level.COLUMNS / 2));
在计算时:
Level.WIDTH = 1000;
Block.LENGTH = 41;
Level.COLUMNS = 12;
根据我的计算,它必须是254,但它总是0。 有人知道我的错误吗?
答案 0 :(得分:6)
private static final int startX = (Level.WIDTH / 2) - (Block.LENGTH * (Level.COLUMNS / 2));
当初始化它所属的类时,将对此变量求值一次。在发生这种情况时,它所依赖的变量(Level.WIDTH
,Block.LENGTH
,Level.COLUMNS
)可能仍然包含0。
当声明其值取决于其他变量值的最终变量时,这些变量也应该是final,并在依赖于它们的变量之前进行初始化。
这不是强制性的,但是否则您的代码没有多大意义,因为在Level.COLUMNS
初始化后更改startX
的值不会更改{{1}的值所以它似乎保持一个不一致的值。