为什么java常量声明为静态?为什么java常量声明为静态?
class Foo{
static final int FII = 2 ;
}
在这个我明白了最终的使用?为什么它必须是静态的?为什么它应该是一个类变量,而不是一个实例变量?
为什么java常量声明为静态?为什么java常量声明为静态?
class Foo{
static final int FII = 2 ;
}
在这个我明白了最终的使用?为什么它必须是静态的?为什么它应该是一个类变量,而不是一个实例变量?
如果它可能因班级的实例而异,那么它显然不是常数。对于Math
的每个实例获得不同的pi值(这不意味着Math
甚至允许构建实例)意味着什么?或者String
的每个实例的不区分大小写排序?
它只是让您可以在没有该类的实例的情况下访问它们。
要求创建一个实例来访问常量字段会浪费资源。
如果一个常量不是静态的,Java将为该类的每个对象(即每个对象的常量的一个副本)为该常量分配一个内存。
如果常量是静态的,那么该类的常量只有一个副本(即每个类一个副本)。
因此,如果该常量只有一个值,则应声明为静态。
如果常量可能对每个对象具有不同的值,例如对象的创建时间,则不应将其声明为静态。
非常好的和技术性的答案,非常感谢。 –
为什么你想让不止一个实例拥有自己的'FII'副本? –
我可以声明'final int FII = 2;'很好。 –
@JonLin:你可以,但你不应该因为它没有增加价值,但只会增加内存使用。例外情况是在构造函数调用中初始化常量 - 然后每个实例都可以拥有自己的常量值(在构造函数运行之后是常量),并且可以具有类似'constructionTime'或类似值的值。 –