關於static關鍵字的理解

2021-08-29 02:00:33 字數 1382 閱讀 9259

1,想要實現物件中的共性資料的物件共享。可以將這個資料進行靜態修飾。

2,被靜態修飾的成員,可以直接被類名所呼叫。也就是說,靜態的成員多了一種呼叫方式。類名.靜態方式。

3,靜態隨著類的載入而載入。而且優先於物件存在。

1,有些資料是物件特有的資料,是不可以被靜態修飾的。因為那樣的話,特有資料會變成物件的共享資料。這樣對事物的描述就出了問題。所以,在定義靜態時,必須要明確,這個資料是否是被物件所共享的。

2,靜態方法只能訪問靜態成員,不可以訪問非靜態成員。

因為靜態方法載入時,優先於物件存在,所以沒有辦法訪問物件中的成員。

3,靜態方法中不能使用this,super關鍵字。

因為this代表物件,而當靜態在時,有可能沒有物件,所以this無法使用。

4,主函式是靜態的。

那麼什麼時候定義靜態成員呢?或者說:定義成員時,到底需不需要被靜態修飾呢?

1,成員變數。(資料共享時靜態化)

該成員變數的資料是否是所有物件都一樣:

如果是,那麼該變數需要被靜態修飾,因為是共享的資料。

如果不是,那麼就說這是物件的特有資料,要儲存到物件中。

2,成員函式。(方法中沒有呼叫特有資料時就定義成靜態)

如果判斷成員函式是否需要被靜態修飾呢?

只要參考,該函式內是否訪問了物件中的特有資料:

如果有訪問特有資料,那方法不能被靜態修飾。

如果沒有訪問過特有資料,那麼這個方法需要被靜態修飾。

1,成員變數所屬於物件。所以也稱為例項變數。

靜態變數所屬於類。所以也稱為類變數。

2,成員變數存在於堆記憶體中。

靜態變數存在於方法區中。

3,成員變數隨著物件建立而存在。隨著物件被**而消失。

靜態變數隨著類的載入而存在。隨著類的消失而消失。

4,成員變數只能被物件所呼叫 。

靜態變數可以被物件呼叫,也可以被類名呼叫。

所以,成員變數可以稱為物件的特有資料,靜態變數稱為物件的共享資料。

注意: 靜態的生命週期很長

靜態**塊:就是乙個有靜態關鍵字標示的乙個**塊區域。定義在類中。

可以完成類的初始化。靜態**塊隨著類的載入而執行,而且只執行一次(new 多個物件就只執行一次)。如果和主函式在同一類中,優先於主函式執行。

如果當靜態**塊、構造**塊、建構函式同時存在時的執行順序是怎麼樣的呢?

以下為測試**:

public class test 

//構造**塊

//構造方法

public test()

public static void main(string args)

![測試結果: 靜態**塊- 構造**塊- 構造方法;](

this關鍵字 static變數 理解

this關鍵字 1.為什麼不能在構造方法中出現該物件?a.現有類程式先載入類 由建立物件 p1 b.同乙個類可以建立多個物件 既然可以有p1 p2 p3 要想在類中體現出物件 引入this關鍵字 q 當我的成員變數名與形參名相同了?answer this 區分形參和成員變數 2.this的作用?th...

this關鍵字 static關鍵字

1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...

關於static關鍵字總結

1 不能在static修飾的方法中引用this變數,只能引用一些靜態變數或方法,或new新的物件 能定義區域性變數 簡言之,靜態方法或塊中,只能引用靜態的方法或變數。2 類中的成員變數 static修飾 有預設值,而類的定義的方法中的區域性變數沒有預設值。3 在類的構造器中,能引用所有的靜態或非靜態...