只是爲了闡明我在思考這個問題,在java中,靜態字段是一個變量/字段,它被整個類使用,或者可以被所有引用該類的對象使用?非靜態字段是由對象定義的變量嗎?而引用與對象1相同的類的第二個對象可以具有與對象1的靜態字段不同的值?靜態和非靜態字段
靜態和非靜態字段
回答
在創建該類的實例之前,可以訪問類中的靜態字段或靜態類變量,而不像實例變量。當在運行時創建該類的實例時,會創建類中的實例變量(非靜態變量)。因此,只有在創建該類的實例時才能訪問非靜態變量。而靜態類成員可以在之前被訪問該類被創建或實例化。
該類的所有實例都可以訪問相同的靜態變量。另一方面,實例變量是單獨/封裝到類的每個實例的。
- 靜態場共享和所有對象使用,類加載時加載
- 非靜態字段是爲每個對象單獨的副本,並且當創建
而一個一個對象加載非靜態字段是由對象定義的變量嗎?
當你創建一個新的對象,每個對象都將有自己的實例副本即非靜態字段
和第二對象指的同一類對象1可以有不同的價值對象1的靜態字段?
並沒有真正得到你的問題,但
- 如果object1和對象2是一類instnaces,那麼如果object1修改類的靜態字段,然後將Object2的獲取更新的價值
實例屬性是特定於實例的屬性,其值不會在同一類的其他實例中共享。
在另一方面,一類(或靜態)屬性是一個通用於所有類的實例,因爲它屬於類,而不是特別的實例。
所以你必須小心使用靜態屬性,因爲一個變化會反映在所有使用它的代碼上,有時會導致意外的結果。在實踐中,我傾向於避免靜態屬性,除了它們具有不變的,不可變的值的情況。
類似的考慮適用於實例方法和靜態方法:實例方法可以「查看」實例和靜態方法和屬性,而靜態方法只能引用類的靜態方法和屬性,並且不能「請參閱「實例方法和屬性(即除非它實例化對象並使用它來訪問其實例成員)。
如果字段聲明爲靜態,存在的 只有一個化身領域,不管有多少類 的情況下(可能是零)最終可能會被創建。一個靜態字段,有時稱爲類 變量,在類被初始化(§12.4)時體現出來。
參考JLS §8.3.1.1:
如果某個字段聲明
static
,存在的領域,只有一個化身,不管有多少實例(可能是零)之類的可能最終被創建。一個靜態字段,有時稱爲類變量,在類初始化時體現出來(§12.4)。
與此相反,一個類的每個實例包含非靜態字段自己的獨特值。
未聲明
static
甲場(有時稱爲非static
場)稱爲實例變量:當類是實例非靜態字段體現。無論何時創建類的新實例(§12.5),都會爲該類或其任何超類中聲明的每個實例變量創建與該實例關聯的新變量。
- 1. 靜態和非靜態
- 2. Java的非靜態字段
- 3. 靜態和非靜態方法工作
- 4. 靜態和非靜態故障
- 5. 在java中靜態和非靜態?
- 6. 靜態函數和非靜態變量
- 7. 靜態和非靜態數據以JavaScript
- 8. 聲明類的靜態和非靜態
- 9. powermockito靜態和非靜態方法鏈
- 10. Java:非靜態類和靜態調用
- 11. 靜態和非靜態方法
- 12. Combinig靜態類和非靜態類
- 13. 靜態和非靜態問題
- 14. 靜態和非靜態錯誤
- 15. 靜態和非靜態誤差
- 16. 靜態和非靜態同步
- 17. 靜態和非靜態訪問值
- 18. 靜態與非靜態類
- 19. 靜態方法或使用靜態字段的非靜態方法
- 20. 訪問Haxe靜態字段的靜態初始化的非靜態數據
- 21. 無法在靜態環境中訪問非靜態字段「Repeater」
- 22. 不能使靜態參考非靜態字段時
- 23. JAVA不能讓一個靜態引用非靜態字段
- 24. 對非靜態字段的靜態引用(android)
- 25. 無法在靜態環境中訪問非靜態字段'lblSystemStatus'
- 26. 爲什麼非靜態方法可以訪問靜態字段?
- 27. 從非靜態字段更改靜態引用?
- 28. 無法對非靜態字段進行靜態引用
- 29. 無法訪問靜態上下文中的非靜態字段
- 30. 從靜態函數訪問非靜態字段
困擾,有道理。換句話說,如果我聲明一個靜態字段,它可以被該類的所有實例使用? –
是的,該類的所有實例都共享該靜態變量的值。 – blackpanther
@ChrisLondon,可以在類的所有實例中使用靜態字段 –