static 和 final 關鍵字

2021-09-27 02:48:40 字數 2885 閱讀 8696

本人鏈結

public

class

a}

靜態方法:又稱做類方法,在類載入的時候就存在了,它不依賴於任何例項,可以通過類名來訪問。靜態方法必須有實現,不能是抽象方法,只能訪問所屬類的靜態成員和靜態方法,不能出現 this 和 super 關鍵字,因為該方法不依賴任何例項就可以訪問,而例項變數或者方法必須先建立例項才能訪問。

public

class

a}

靜態**塊:僅在類第一次被載入時執行一次的**塊,可用於對靜態變數初始化。

public

class

apublic

static

void

main

(string[

] args)

}//輸出:hello word!

靜態內部類:非靜態內部類必須依賴外部類的例項,而靜態類不需要,直接通過外部類名來建立。靜態內部類不能訪問外部類的非靜態的變數和方法。

public

class

apublic

static

class

staticinnerclass

public

static

void

main

(string[

] args)

}

靜態變數宣告和靜態語句塊優先於例項變數宣告和普通語句塊,靜態變數宣告和靜態語句塊的初始化順序取決於它們在**中的順序,最後才是建構函式的初始化。

存在繼承情況下的初始化順序,括號內容的執行順序取決於在**的順序:

順序規則:第一次載入類(還未建立物件)時,從最頂層父類開始執行靜態變數宣告、靜態語句塊(執行順序與**順序有關);當真正建立物件時,從最頂層父類開始執行例項變數宣告、普通語句塊和構造方法(前面兩個先執行,執行順序與**順序有關,構造方法最後執行),只有父類成員初始化完畢,才會初始化子類成員。

class

father

static

public

father()

}public

class

sonextends

father

static

public

son(

)public

static

void

main

(string[

] args)

}/*輸出:

father靜態**塊

son靜態**塊

father普通**塊

father構造方法

son普通**塊

som構造方法

*/

宣告資料為常量,可以是編譯時常量,也可以是在執行時被初始化後不能被改變的常量。

final

int x =1;

//x = 2; //報錯,基本型別不能更改

final a a =

newa()

;a.c =1;

//正常執行,引用變數不能更改引用物件,但可以更改物件資料

資料可分為成員變數和區域性變數,兩種都可以加 final。

成員變數

final 修飾的成員變數必須顯示賦初始值。

不管是靜態變數還是例項變數,在分配記憶體時,會先分配預設值(0,\u0000,false 或 null)。當執行靜態**塊或者靜態變數宣告時可對靜態變數顯示賦初始值;當執行普通**塊、例項變數宣告或者構造器時可對例項變數顯示賦初始值。如果變數沒有顯式賦初始值,變數初始值使用預設值。而被 final 修飾的成員變數使用預設值將毫無意義,所有規定 final 修飾的成員變數必須顯示賦初始值。

public

class

aprivate

static

int a =10;

private

static

final

int b =10;

private

final

int c;

//private final int d; //沒有賦初始值報錯

publica(

)public

static

void

main

(string[

] args)

}

區域性變數
public

void

test

(final

int a)

public

static

void

main

(string[

] args)

被 final 修飾的方法不能被子類重寫。private 方法被隱式地指定為 final,如果在子類中定義的方法和父類中的乙個 private 方法簽名相同,不是重寫父類方法,而是定義了乙個新的方法。

class

bprivate

voidf2(

)}public

class

aextends

bprivate

voidf2(

)}

被 final 修飾的類不能被繼承。

final

class

bpublic

class

aextends

b

static關鍵字和final關鍵字

static記住幾點 1.優先順序高,載入優先物件例項化 2.在記憶體中只分配一次 3.屬於類本身,所有例項共享,一處變,處處變 4.1 static不能訪問沒有static修飾的方法 因為不認識,物件例項後才能在外部使用方法 2 可以訪問static塊 3 未加static的方法可以訪問stati...

final關鍵字 和 static關鍵字

一.final關鍵字的作用 1.使用 final 方法的原因 第乙個原因是把方法鎖定,以防任何繼承類修改它的含義 第二個原因是final修飾的方法效率快。2.final final用於修飾類 成員變數和成員方法。final修飾類,類不能被繼承 final修飾成員方法,方法不能被重寫,但是子類可以用父...

static和final 關鍵字

static 關鍵字 可以用於修飾屬性,也可以用於修飾方法,還可以用於修飾 類 後面的課程講 static 修飾屬性 無論乙個類生成了多少個物件,所有這些物件共同使用唯 一乙份靜態的成員變數 乙個物件對該靜態成員變數進行了修改,其他物件 的該靜態成員變數的值也會隨之發生變化。如果乙個成員變數是 st...