Java中的静态最终变量[重复]
Posted
技术标签:
【中文标题】Java中的静态最终变量[重复]【英文标题】:Static Final Variable in Java [duplicate] 【发布时间】:2011-11-25 16:37:13 【问题描述】:可能重复:private final static attribute vs private final attribute
将变量声明为有什么区别
static final int x = 5;
或
final int x = 5;
如果我只想让变量是局部的,并且是常量(以后不能更改)?
谢谢
【问题讨论】:
如果这是一个变量(而不是一个字段),它根本不可能是静态的。 这个question之前已经讨论过了。 这不是当前标记的重复项。这个问题是询问如何将“静态最终”与方法局部变量一起使用,链接的问题是将其用作类/对象变量(在任何方法定义之外)。我认为答案是,在方法中使用“final”可以在大多数情况下完成人们可能期望“static final”在该上下文中执行的操作。但是,我想知道它是否是一个对象而不是一个 int,如果可变性可能会产生与这种直觉不同的结果。我没有测试过这个。有人知道吗? 【参考方案1】:只要有final
就会有预期的效果。
final int x = 5;
...
x = 10; // this will cause a compilation error because x is final
声明静态使其成为类变量,使其可以使用类名<ClassName>.x
进行访问
【讨论】:
【参考方案2】:将字段声明为“final”将确保该字段是常量且不能更改。 不同之处在于“静态”关键字的使用。
将字段声明为静态意味着它与类型相关联,而不是与实例相关联。即,所有对象只存在一个字段副本,而不是每个对象的单独副本。 因此,可以通过类名访问静态字段。
如您所见,在这两种情况下(将字段声明为“final”和“static final”)都满足了您对字段应为常量的要求。
类似的问题是private final static attribute vs private final attribute
希望对你有帮助
【讨论】:
【参考方案3】:在第一个语句中定义变量,它对所有对象都是通用的(类静态字段)。
在第二个语句中定义变量,它属于每个创建的对象(很多副本)。
在你的情况下,你应该使用第一个。
【讨论】:
【参考方案4】:对于原始类型,“最终静态”将是声明常量的正确声明。当非静态最终变量是对对象的常量引用时,它才有意义。在这种情况下,每个实例都可以包含自己的引用,如JLS 4.5.4 所示。
请参阅 Pavel 的回复以获取正确答案。
【讨论】:
以上是关于Java中的静态最终变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章