决赛是否是静态的是否重要?

时间:2013-09-09 08:08:07

标签: java optimization constants final

我是否将类常量声明为静态是否重要?

public class MyClass {
    private final static int statConst = 1;
    private final int nonStatConst = 2;
}

statConstnonStatConst永远不会改变,因为它们是最终的,所以即使nonStatConst在每个实例中都是相同的。是否让它们静止是否重要?

(我意识到只有private final int otherConst;

会有所不同

5 个答案:

答案 0 :(得分:4)

唯一可以产生影响的方法是,如果要从静态上下文引用成员;换句话说,您没有要使用的类的特定实例。在这种情况下,您需要将变量设置为静态。

答案 1 :(得分:2)

是的,这很重要。

nonStatConst属于特定instance

statConst在所有实例中共享。

访问时static context也很重要。

来到final如果您这样声明,则必须在构造函数完成之前初始化您在类中声明的字段。

答案 2 :(得分:1)

不同之处在于,将在每个实例中分别为nonStatConst分配空间。对于静态statconst空间,将仅分配一次。

答案 3 :(得分:0)

如果它是静态的,则只创建一个与该类关联的常量,如果每个对象都是非静态的,则将新创建该常量。如果它是非静态的,则无法在不为类创建对象的情况下访问它

答案 4 :(得分:0)

有两件事需要考虑。

  1. 如果不使变量成为静态,则每个创建的MyClass实例都会为每个变量(nonStatConst)分配新的内存空间。相反,无论我们拥有多少MyClass实例,statConst只会分配一次内存空间。

  2. 如果nonStatConst不是静态的,则必须实例化MyClass才能访问它。