可能是重复问题:
private final static attribute vs private final attribute
将变量声明为
static final int x = 5;
或。final int x = 5;
如果我只想让这个变量是局部的,且是常量(以后不能更改),该怎么做?谢谢。
可能是重复问题:
private final static attribute vs private final attribute
将变量声明为
static final int x = 5;
或。final int x = 5;
如果我只想让这个变量是局部的,且是常量(以后不能更改),该怎么做?只使用 final
就可以达到预期的效果。
final int x = 5;
...
x = 10; // this will cause a compilation error because x is final
声明静态变量将其转换为类变量,使得可以使用类名 <ClassName>.x
访问它。
将字段声明为“final”将确保该字段是常量并且不能更改。而“static”关键字的使用则有所不同。
将字段声明为静态意味着它与类型相关联,而不是与实例相关联。也就是说,所有对象只有一个字段副本而非每个对象都有一个副本。因此,可以通过类名访问静态字段。
正如您所看到的,在两种情况下(将字段声明为“final”和 “static final”),都可以实现字段应为常量的要求。
类似的问题请参见private final static attribute vs private final attribute
希望这可以帮助您。
第一条语句中,您定义了一个变量,该变量对所有对象都通用(类静态字段)。
第二条语句中,您定义了一个变量,该变量属于每个创建的对象(许多副本)。
在您的情况下,应使用第一个。
对于原始类型,"final static"将是一个适当的声明来声明一个常量。当它是一个指向对象的常量引用时,一个非静态的final变量是有意义的。在这种情况下,每个实例都可以包含自己的引用,如JLS 4.5.4所示。
查看Pavel的回答获取正确答案。