在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. 防止使用靜態修飾符
- 2. java中有沒有對靜態塊的訪問修飾符
- 3. 缺位 '常量' 修飾的
- 4. 靜態庫和常量
- 5. Java訪問修飾符和空指針異常
- 6. Java拼圖:修飾符
- 7. Java類的修飾符
- 8. JAVA中的「threadsafe」修飾符?
- 9. Java公共/私有和靜態修飾符如何影響在一行上聲明的多個變量?
- 10. 在Java中的私有靜態嵌套類內訪問修飾符
- 11. Java反射,將volatile修飾符添加到私有靜態字段
- 12. 在Java中如何以及在何處使用靜態修飾符?
- 13. 什麼時候在PHP中使用靜態修飾符
- 14. 訪問修飾符是否適用於靜態類函數?
- 15. 創建EventHandler時使用靜態修飾符有什麼意義?
- 16. 「導入」後的「靜態」修飾符是什麼意思?
- 17. Java圖標常量 - 靜態常量是否正常?
- 18. Java枚舉與靜態常量
- 19. 差異靜態常量和靜態的返回時,一個靜態變量
- 20. Swing和最終修飾符
- 21. 同一類中的Java靜態變量和非靜態變量
- 22. 比較靜態字符[]和常量字符*
- 23. __strong修飾符
- 24. __printflike__修飾符
- 25. 爲什麼python對常量沒有任何訪問修飾符?
- 26. 靜態,定義和常量在C
- 27. 靜態的常量成員,靜態類和瓶頸
- 28. Java默認訪問修飾符
- 29. Java訪問修飾符優先
- 30. 在java中訪問'final'修飾符類
任何用例?例如? –