为什么java常量声明为static?

Vai*_*hav 32 java static final constants class-variables

为什么java常量声明为static?

class Foo{
    static final int FII = 2 ;
}
Run Code Online (Sandbox Code Playgroud)

在这个我理解使用final?为什么它必须是静态的?为什么它应该是一个类变量,而不是一个实例变量?

wan*_*nik 89

如果常量不是静态的,Java将在类的每个对象中为该常量分配一个内存(即每个对象的常量的一个副本).

如果常量是静态的,那么该类的常量只有一个副本(即每个类一个副本).

因此,如果常量只有一个值,则应声明为static.

如果常量可能对每个对象具有不同的值,例如对象的创建时间,则不应将其声明为static.

  • @Jezor 不,这是一个常数。同一类的对象可以具有不同值的相同常量。“例如对象的创建时间”。 (2认同)

Jon*_*eet 37

如果它可能因类的实例而异,那么它显然不是常数.为每个实例获取不同的pi值意味着什么Math(不是Math甚至允许构造实例)?或者每个实例的不区分大小写排序String


Mat*_*Mat 13

它只是为了您可以在没有该类实例的情况下访问它们.

要求仅为访问常量字段而创建实例有点浪费资源.