Java關鍵字介紹之static

2021-09-22 04:39:47 字數 2321 閱讀 9040

1.關鍵字static(先記住這些,再往下看)

1)靜態方法和靜態變數是屬於某乙個類,而不屬於類的物件。

2)靜態方法和靜態變數的引用直接通過類名引用。

3)在靜態方法中不能呼叫非靜態的方法和引用非靜態的成員變數。反之,則可以。

4)靜態變數在某種程式上與其他語言的全域性變數相類似,如果不是私有的就可以在類的外部進行訪問。

2.何時使用static

在我們建立乙個類的例項時(物件),通常使用new方法,這樣這個類的資料空間才會被建立,其方法才能被呼叫。

但是,有時候我們希望乙個類雖然可以被建立n個物件(顯然這n個物件的資料空間是不相同的),但這n個物件的某些資料是相同的,即不管這個類有多少的例項,這些資料對這些例項而言之有乙份記憶體拷貝(見示例1)。這是靜態變數的情形。

另一種情形是,你希望某個方法不與包含它的類的任何物件關聯在一起。也就是說,即使沒有建立物件,也能夠呼叫這個方法。static 方法的乙個重要用法就是在不建立任何物件的前提下,就可以呼叫它(見示例2)。這是靜態方法的情形。

還有一種特殊的用法出現在內部類中,通常乙個普通類不允許宣告為靜態的,只有乙個內部類才可以。這時這個宣告為靜態的內部類可以直接作為乙個普通類來使用,而不需例項乙個外部類(見示例3)。這是靜態類的情形。

示例1publicclasststatic

publictstatic(intj)

publicstaticvoidmain(string args)

} 結果: 0

5 4

4 4

static變數在類被載入時建立,只要類存在,static變數就存在。它們在定義時必須進行初始化。上例中沒有初始化i,所以會得到預設的初始值0。static的變數的初始化僅能一次,static變數只是接受了最後一次的初始化。

實際這還是多個例項共享乙個靜態的變數的問題。

示例2未宣告為static

classclassa

classclassb

}}

宣告為static

classclassa

}classclassb

}在使用靜態方法時要注意,在靜態方法中不能呼叫非靜態的方法和引用非靜態的成員變數(在static方法中也不能以任何方式引用this或super)。理由很簡單,對於靜態的東西,jvm在載入類時,就在記憶體中開闢了這些靜態的空間(所以可以直接通過類名引用),而此時非靜態的方法和成員變數所在的類還沒有例項化。

所以如果要使用非靜態的方法和成員變數,可以直接在靜態方法中例項化該方法或成員變數所在的類。public static void main就是這麼幹的。

示例3

publicclassstaticcls

}classoutercls

}}

結果:

innercls

3.靜態初始化

static定義的變數會優先於任何其它非static變數,不論其出現的順序如何。靜態**塊(在「static

value(inti)

staticvoidinc()

}classcount

value 

v=newvalue(10);

staticvalue 

v1 , 

v2 ;

static

}publicclasststaticblock

} 結果:

in the static block of calss count v1.c=0v2.c=0

in the static block of calss count v1.c=27v2.c=27

in the static block of calss count v1.c=15v2.c=15

in the main:

ct.c=10

v1.c=10v2.c=10

v1.c=11v2.c=11

ct.c=11

不管是v,v1還是v2,它們操作的成員變數都是同乙個靜態變數c。

在類count中先初始化v1,v2(static value v1, v2;),再初始化靜態**塊(static{}),最後初始化v。

java關鍵字介紹

關鍵字 含義 abstract表明類或者成員方法具有抽象屬性 assert 用來進行程式除錯 boolean 基本資料型別之一,布林型別 break 提前跳出乙個塊 byte 基本資料型別之一,位元組型別 case 用在switch語句之中,表面其中的乙個分支 catch 用在異常處理中,用來捕捉異...

Java關鍵字介紹之static

1 關鍵字static 先記住這些,再往下看 1 靜態方法和靜態變數是屬於某乙個類,而不屬於類的物件。2 靜態方法和靜態變數的引用直接通過類名引用。3 在靜態方法中不能呼叫非靜態的方法和引用非靜態的成員變數。反之,則可以。4 靜態變數在某種程式上與其他語言的全域性變數相類似,如果不是私有的就可以在類...

Java之關鍵字

1.transient 在實際中,有時出於安全性等方面的考慮,我們不希望一些類的某些屬性被序列化,這時可以考慮使用transient關鍵字進行修飾這些變數 屬性。transient使用小結 1 一旦變數被transient修飾,變數將不再是物件持久化的一部分,該變數內容在序列化後無法獲得訪問。2 t...