为什么java常量声明为static?

问题描述 投票:27回答:3

为什么java常量声明为static?

class Foo{
    static final int FII = 2 ;
}

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

java static constants final class-variables
3个回答
34
投票

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


86
投票

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

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

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

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


13
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.