在java中,常量被称为keyword(final),其值永远不会改变。我看到一些人在不声明静态修饰符的情况下创建常量。我的问题是,如果常量被声明为静态?如果是这样或者没有,为什么?Java常量和静态修饰符
回答
如果在声明变量时为final
变量赋值,那么它不是static
,因为每个实例都有自己的变量具有相同的值,这是浪费的。但是,如果您需要一个实例变量,其值只能设置一次(但不同的实例可能具有不同的值),则该变量将不得不为final
,而不是static
。
例如:
class Person
{
final int id;
public Person(int id) {
this.id = id;
}
}
技术上,关键字final
足以让一个常数,因为你不能改变一次分配的最终变量的值。
static
如果常量不绑定到特定的对象实例,应该使用。
例如,考虑你有一个Circle
类,并且你有一个计算面积的方法。您需要使用常数Pi
来达到此目的。 Pi
常数不会从圆圈变为圆圈。因此将Pi声明为静态final是有意义的。
无论你喜欢什么。我会亲自使用静态。当你声明它为静态时,你不需要创建一个对象。你也可以创建一个'常量'文件,在其中存储所有的常量。 public final static ...
所以,你基本上使用静态最终,如果它是所有对象使用的“常量”。如果不是,只需将其作为final来传递给构造函数。
你首先需要了解什么常数 DO(即,当你标记字段/局部变量final
会发生什么。)
当原始/字符串字段被标记为final
,它变成编译时常量即它的值作为字节码本身的一部分传递。因此其值不是计算/生成的在运行时。这给你一个性能优势。
关键字static
用于表示 - 该字段对于类别的每个实例都不是唯一的。您也可以有非静态的final
常量。另外,如果方法局部变量(原始)被标记为final
,它也变成常量。因此,不,static
与常量无关。这是一个设计的选择。
带有“final”关键字的constan将永远不会改变......其实你不能改变这个字段所引用的实例,但是你可以改变这个实例中的值。
想象一下这样的例子:
class SomeClass{
final Car MYCAR;
...
}
有了这个代码,你将不能够改变的MYCAR
参考:
myCar = new Car(.....);
但你可以这样做:
myCar.setPrice(10000);
所以是的,如果SomeClass
的任何实例需要有自己的对象副本MYCAR
,但不希望任何人更改此对象的引用,则不要在此字段中设置static
。
当您在类中使用关键字static
时,类的所有实例。即一个类的所有对象共享相同的变量,如果你声明一个类作为final,它不能被实例化(它的对象不能被创建)。所以如果你声明一个变量final,那么它只能赋值一次。 假设
class CalculateArea {
final static double PI = 3.1417;
/*write rest of the code to calculate area.
the value of PI will remain constant no matter
how many times its object is made
if you try to override the value of `PI` it will raise an error.
*/
}
- 1. Java静态修饰符查询
- 2. 防止使用静态修饰符
- 3. Eclipse JDT静态字段修饰符
- 4. 在“冗余‘静态’修饰符”警告
- 5. 理解静态修饰符的问题
- 6. Objective-C修饰符用于静态?
- 7. 在C++中是静态修饰符吗?
- 8. java中有没有对静态块的访问修饰符
- 9. 带静态访问修饰符的最终变量
- 10. Java类修饰符
- 11. 缺位 '常量' 修饰的
- 12. 动态访问修饰符
- 13. 静态库和常量
- 14. Java访问修饰符和空指针异常
- 15. Java拼图:修饰符
- 16. Java类的修饰符
- 17. JAVA中的“threadsafe”修饰符?
- 18. Java访问修饰符:无修饰符与“默认”
- 19. 静态常量
- 20. Java公共/私有和静态修饰符如何影响在一行上声明的多个变量?
- 21. 抽象静态类Java中给予修饰
- 22. Java反射,将volatile修饰符添加到私有静态字段
- 23. 在Java中的私有静态嵌套类内访问修饰符
- 24. 在Java中如何以及在何处使用静态修饰符?
- 25. 什么时候在PHP中使用静态修饰符
- 26. 为什么在这段代码中需要静态修饰符?
- 27. “导入”后的“静态”修饰符是什么意思?
- 28. 创建EventHandler时使用静态修饰符有什么意义?
- 29. 访问修饰符是否适用于静态类函数?
- 30. 修饰符static只允许在常量变量声明中
任何用例?例如? –