4 回答

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
static
成員屬于類而不是特定實(shí)例。
這意味著即使您創(chuàng)建了一百萬(wàn)個(gè)類的實(shí)例,或者您沒(méi)有創(chuàng)建任何一個(gè)實(shí)例,static
也只存在一個(gè)字段的實(shí)例[1]。它將由所有實(shí)例共享。
由于static
方法也不屬于特定實(shí)例,因此它們不能引用實(shí)例成員。在給出的示例中,main
不知道它應(yīng)該引用Hello
哪個(gè)Clock
類的實(shí)例(以及它的哪個(gè)實(shí)例)。static
會(huì)員只能參考static
會(huì)員。實(shí)例成員當(dāng)然可以訪問(wèn)static
成員。
附注:當(dāng)然,static
成員可以通過(guò)對(duì)象引用訪問(wèn)實(shí)例成員。
例:
public class Example { private static boolean staticField; private boolean instanceField; public static void main(String[] args) { // a static method can access static fields staticField = true; // a static method can access instance fields through an object reference Example instance = new Example(); instance.instanceField = true; }
[1]:根據(jù)運(yùn)行時(shí)特性,它可以是每個(gè)ClassLoader或AppDomain或線程一個(gè),但這不是重點(diǎn)。

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
這意味著Hello中只有一個(gè)“clock”實(shí)例,而不是“Hello”類的每個(gè)單獨(dú)實(shí)例中的一個(gè)實(shí)例,或者更多 - 這意味著在所有實(shí)例中都會(huì)有一個(gè)共同的“時(shí)鐘”引用。 “Hello”課程。
所以,如果你要在你的代碼中的任何地方做一個(gè)“新的Hello”:A-在第一個(gè)場(chǎng)景中(在更改之前,不使用“static”),每次調(diào)用“new Hello”時(shí)它會(huì)生成一個(gè)新的時(shí)鐘,但是在第二個(gè)場(chǎng)景中B-(在更改之后,使用“靜態(tài)”),每個(gè)“新的Hello”實(shí)例仍將共享并使用首先創(chuàng)建的初始和相同的“時(shí)鐘”引用。
除非你在main之外的某個(gè)地方需要“時(shí)鐘”,否則這也會(huì)起作用:
package hello;public class Hello{ public static void main(String args[]) { Clock clock=new Clock(); clock.sayTime(); }}

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
該static
關(guān)鍵字是指某物(字段,方法或嵌套類)是相關(guān)于類型,而不是任何特定的實(shí)例的類型。因此,例如,一個(gè)調(diào)用Math.sin(...)
沒(méi)有Math
該類的任何實(shí)例,實(shí)際上您無(wú)法創(chuàng)建Math
該類的實(shí)例。
有關(guān)更多信息,請(qǐng)參閱Oracle Java教程的相關(guān)部分。
邊注
遺憾的是, Java 允許您像訪問(wèn)實(shí)例成員一樣訪問(wèn)靜態(tài)成員,例如
// Bad code!Thread.currentThread().sleep(5000);someOtherThread.sleep(5000);
這使它看起來(lái)好像sleep
是一個(gè)實(shí)例方法,但它實(shí)際上是一個(gè)靜態(tài)方法 - 它總是使當(dāng)前線程休眠。最好在調(diào)用代碼中明確這一點(diǎn):
// ClearerThread.sleep(5000);

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
static
Java中的關(guān)鍵字表示變量或函數(shù)在該類的所有實(shí)例之間共享,因?yàn)樗鼘儆?em>類型,而不是實(shí)際的對(duì)象本身。
因此,如果您有一個(gè)變量:private static int i = 0;
并i++
在一個(gè)實(shí)例中遞增it(),則更改將反映在所有實(shí)例中。i
在所有情況下現(xiàn)在都是1。
可以在不實(shí)例化對(duì)象的情況下使用靜態(tài)方法。
添加回答
舉報(bào)