为什么java常量声明为static?
为什么java常量声明为static?
class Foo{ static final int FII = 2 ; }
在这个我理解使用final? 为什么它必须是静态的? 为什么它应该是一个类变量,而不是一个实例变量?
如果它可能因类的实例而异,那么它显然不是常数 。 为每个Math
实例获得不同的pi值意味着什么(不是Math
甚至允许构造实例)? 或者每个String
实例的不区分大小写排序?
如果常量不是静态的,Java将在类的每个对象中为该常量分配一个内存(即每个对象的常量的一个副本)。
如果常量是静态的,那么该类的常量只有一个副本(即每个类一个副本)。
因此,如果常量只有一个值,则应声明为static。
如果常量可能对每个对象具有不同的值,例如对象的创建时间,则不应将其声明为static。
它只是为了让你可以在没有该类实例的情况下访问它们。
要求创建实例只是为了访问常量字段,这有点浪费资源。