天天看點

static關鍵字

1.靜态成員變量

* 在類中,用static聲明的成員變量為靜态成員變量,它是該類的公用變量,在第一次使用時被初始化,對于該類的所有對象來說,static成員變量隻有一份。

* 靜态成員可以通過類名(不需要執行個體化)或類的執行個體去通路

* 靜态成員變量,它有專屬的資料區,類加載進記憶體的時候,靜态屬性也同時加載到專屬的資料區

* 靜态成員變量,是唯一的,它屬于類的,通路方法:類名.靜态屬性,是以靜态成員變量稱為,類變量  類屬性

2.靜态方法

* 用static聲明的方法為靜态方法,該方法獨立于類的執行個體,是以也叫類方法;無static修飾的方法是執行個體方法

* 靜态成員方法,它有專屬的方法區,類加載進記憶體的時候,靜态方法也同時加載到專屬的方法區

* 靜态成員方法,是唯一的,它屬于類的,通路方法:類名.靜态方法,是以靜态成員方法稱為,類方法

* 靜态方法中隻能調用本類中其他的靜态成員(變量和方法)

* 靜态方法中不能使用this和super關鍵字

* 在靜态方法裡面無法調用非靜态屬性,原因:非靜态屬性,它屬于對象,隻有new 對象,給它進行指派,這樣調用時候,才具有實際意義,而,靜态方法是可以通過 類名.靜态方法 進行通路,即使沒有new這個對象也是可以通路

* 靜态方法不可通路非靜态方法,但是,反過來,非靜态方法可以通路靜态方法

* 子類也可以繼承父類的靜态方法

* 子類不能重寫父類的靜态方法

3.靜态代碼塊

* 在類中可以使用不包含在任何方法中的靜态代碼塊(static block),當類被jvm載入時,靜态代碼塊被執行,且隻被執行一次

* 類加載後其他子產品執行順序:static代碼塊   -- > 非靜态代碼塊   ---- > 構造函數

* 靜态代碼塊經常用來初始化類的靜态成員變量

* 靜态代碼塊中,不能通路非靜态屬性,可以通路靜态屬性,或者靜态方法

4.其他

* 靜态方法和非靜态方法裡都不能定義靜态變量???【解答】因為靜态變量是類的變量,如果在方法中定義,就不算是類的變量了

**簡單點記憶:static聲明的東東都是屬于類,不屬于對象,對象如果想用,必須new一個執行個體,靜态的東東是共有财産,公家不能使用私有财産(非static的東東),但私人可以使用公家的财産;公家财産可以遺傳,但是祖宗的東西不能變**

* 使用靜态static關鍵修飾的方法或屬性或代碼塊都是按聲明的順序加載入記憶體,是以,在調用過程中一定要注意順序。 非靜态,沒有這個限制

* 接口中的抽象方法需要被重寫,是以不能是static的

* static 和 final 的差別:static定義後在可以修改(不在子類),final定義後不能修改

5.final的作用

1)修飾類:表示該類不能被繼承

2)修飾方法:表示方法不能被重寫

3)修飾變量:表示标量隻能一次指派以後不能被修改(常量)