變量聲明爲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. 爲什麼WebMethod聲明爲靜態?
- 6. 爲什麼java的最終變量表示不可達聲明
- 7. 爲什麼靜態變量需要在C++中聲明兩次
- 8. Django - 爲什麼模型類中聲明的變量靜態
- 9. 爲什麼不聲明每個變量都是靜態的
- 10. 爲什麼在本地類中接受靜態最終變量?
- 11. 靜態最終常量變爲空
- 12. .properties作爲最終的靜態變量
- 13. 應該將GSON聲明爲靜態最終?
- 14. 爲什麼java常量聲明爲靜態?
- 15. 聲明私有靜態最終變量的原因
- 16. 聲明本地變量爲循環中的最終狀態
- 17. 爲什麼C#不允許變量在方法中聲明爲靜態?
- 18. 靜態最終變量
- 19. 靜態最終變量
- 20. 聲明和放置靜態變量
- 21. 變量聲明:爲什麼接口
- 22. Java - 靜態和最終變量
- 23. 最終靜態與非最終靜態變量?
- 24. 爲什麼變量名稱應該被聲明爲「錯誤?
- 25. 爲什麼聲明Mapper和Reducer類是靜態的?
- 26. 爲什麼靜態變量不好?
- 27. 在Swift類或結構中聲明爲靜態的變量會發生什麼?
- 28. 爲什麼我不能聲明一個參數化的靜態類變量?
- 29. 變量保持其狀態,即使未聲明爲靜態
- 30. 方法中最終變量聲明的作用是什麼?
我認爲你有「靜」混淆「揮發」。 –
(爲什麼人們喜歡這樣的問題?) –
@Stephen C:如果至少有3人(包括你)不同意upvotes:爲什麼沒有人倒退它? –