在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只允許在常量變量聲明中
任何用例?例如? –