变量声明为static
以获取其值的最新单一副本;这意味着价值将在某个地方发生变化。但为什么要声明同一个变量为final
,这将不允许变量在其他位置(常量值)被更改?为什么变量应声明为静态和最终
回答
最终停止继承了它
恩,这是一个字段... –
最后的'fields'可以被子类访问。公众的访问任何地方。 –
@Peter:最终与可达性正交。 –
当地variables
是在堆栈上,并没有任何的静态类。
您可以有一个静态的field
这可能是也可能不是最终的。如果它不会改变的话,你会让这个区域成为最后的决定。
static
这样就可以在不创建类实例的情况下访问该变量或方法,并且每个实例只有一个变量而不是一个变量。
A final
class不能扩展。一个final
变量不能改变它的值,它表现为一个常量。并且方法不能被覆盖。
声明为静态的变量表示其值由该类的所有实例共享。将变量声明为final会使性能稍微好一些,并使代码更易读。
我宁愿将它看作“与类型相关而不是类型的任何实例” - “由所有实例共享”表示必须有*至少一个*实例,但情况并非如此。 –
static final
在Java中用于表示常量。静态用于表示类变量,因此不需要为该类实例化对象以访问该变量。
最终方法不能被覆盖,最终变量只能被初始化一次。
如果您只使用static关键字,则该值不会是一个常量,因为它可以再次初始化。
static
字段可以修改(例如public static
字段可以被任何类别修改)。初始化后无法修改static final
字段。
静态与获取最新和单一副本无关,除非这里的“单一副本”意味着一个类的所有实例都具有相同的值(但是,我认为您可能会将其与volatile
混淆)。静态意味着类变量。当你希望它是一个常量时,你可以做到最终结果(这实际上是Java常量声明的方式:static final
)。
'静态'确实是关于“单一副本”,如果你有两个赋值给某个字段'o1.x = 0; o2.x = 1;'那么除非该字段是静态的,否则当读取'o1.x'时后面的赋值可能不可见。 (不要说这个问题是有道理的,只是说他不确定他确实将它与易失性混合在一起。) – aioobe
感谢您指出这一点,我将对其进行编辑以使其清晰。 –
可能会提供类似于constants
的东西。
您创建了static final
变量以使其值无需实例化对象即可访问。 例如: -
public class MyClass
{
public static final String endpoint= "http://localhost:8080/myClass":
/* ...*/
}
然后你就可以访问使用该行的数据:
MyClass.endpoint
错误,这就是你使用'static'的原因。 'final'既不在这里,也不在那里 – Nick
'final'是为constness。没有最后的任何人都可以改变价值。 – LoSciamano
这种说法是正确的。然而,你的回答是误导性的,因为它意味着'static final'和变量可以在没有实例化对象的情况下被访问的事实之间的联系。 'final'关键字不影响是否可以在不实例化对象的情况下访问变量,例如,你可以拥有一个非静态的'final'变量,如果没有这个类的存在就不能访问它。 – Nick
像你提到的自己,这样做是为了创建常量。您创建一个字段来保存具有特定含义的值。这样你就不必在任何地方声明该值,而是可以引用静态。
一个变量被定义为final
的那一刻,它可能不应该被称为“可变的”,因为它不再是“变化” :)
甲static
变量不依赖于的任何特定实例阶级 - 它只与阶级本身相关联,而且仅从范围的角度来看。
所以,你是 - 一个static
和final
变量实际上是一个值不绑定到任何特定类的实例,并不会改变。它是一个常量值,可以从Java代码中的任何地方引用。
在某些时候,当您决定更改此常量的值时,只需进行一次更改即可将此更改正确传播到所有其他使用此常量的类。
变量应该只有当他们在课堂上的more than one
方法或如果程序调用类的方法之间应该save their values
是required
为use
声明为fields
。
例如user.lastName
lastName的应该是字段,因为它是needed
期间object lifecycle
static
只有当他们需要
not
使用在类的一种以上的方法或
变量应声明如果程序应该not
在调用类的方法之间保存它们的值。
例如Math.max(num1,num2)
林not intristed
在NUM1和NUM2 after compleating
此操作
- 1. 为什么不能在非静态块中声明静态最终变量?
- 2. 声明静态变量时的输出是什么?为什么?
- 3. 为什么我们要声明记录器静态最终?
- 4. PHP - 为什么我无法声明静态常量变量?
- 5. Django - 为什么模型类中声明的变量静态
- 6. 为什么静态变量需要在C++中声明两次
- 7. .properties作为最终的静态变量
- 8. 为什么在本地类中接受静态最终变量?
- 9. 为什么java常量声明为静态?
- 10. 为什么C#不允许变量在方法中声明为静态?
- 11. 静态最终变量
- 12. 静态最终变量
- 13. 变量声明:为什么接口
- 14. Java - 静态和最终变量
- 15. 最终静态与非最终静态变量?
- 16. 为什么变量名称应该被声明为“错误?
- 17. 为什么声明Mapper和Reducer类是静态的?
- 18. 变量保持其状态,即使未声明为静态
- 19. 为什么我不能声明一个参数化的静态类变量?
- 20. 在Swift类或结构中声明为静态的变量会发生什么?
- 21. 方法中最终变量声明的作用是什么?
- 22. 为什么依赖属性被声明为静态只读?
- 23. 声明不能被标记为“静态”,为什么
- 24. 为什么不能将Java类声明为静态?
- 25. 为什么我的登录方法声明为静态?
- 26. 为什么jsp中的EL函数必须声明为静态?
- 27. 为什么.NET委托不能被声明为静态?
- 28. 为什么接口方法不能是“静态”和“最终”?
- 29. 变量声明后的静态块是什么?
- 30. 函数内部声明的静态变量的值是什么?
我认为你有“静”混淆“挥发”。 –
(为什么人们喜欢这样的问题?) –
@Stephen C:如果至少有3人(包括你)不同意upvotes:为什么没有人倒退它? –