static(靜態)關鍵字的特點和用法

2022-09-13 12:18:09 字數 1753 閱讀 1967

→靜態:static

用法:是乙個修飾符,用於修飾成員(成員變數,成員函式)

class

person

/*每例項化乙個person物件,每個物件在堆記憶體中都有乙個country

而加上static以後,就只在記憶體總存在乙個靜態的country被其他的物件直接呼叫,可以節省記憶體空間。

當成員被靜態修飾以後,除了可以被物件呼叫外,還可以直接被類名呼叫。

*/特有內容隨著物件儲存

比如person類,每個中國人都有自己的名字,而國籍都是一樣的中國,所以contry可以定義為static而name不用。

→static特點

1、隨著類的載入而載入

也就是說:靜態會隨著類的消失而消失,說明他的生命週期最長

2、優先於物件存在

3、被所有物件所共享

4、可以直接被類名呼叫

→int age(成員變數)例項變數和 static

intage(靜態成員變數)類變數的區別

1、存放為著

例項變數是隨著物件的建立而存在堆記憶體中

類變數隨著類的載入而存在於方法區中

2、生命週期

例項變數隨著物件的消失而消失

類變數生命週期最長,隨著類的消失而消失

→靜態使用注意事項

1、靜態方法只能訪問靜態成員

2、靜態方法中不可以定義this,super關鍵字

因為靜態優先於物件存在,所以靜態方法中不可以出現this

3、主函式是靜態的

→靜態的好處和壞處

好處:對物件的資料進行單獨空間的儲存,節省空間,沒有必要每個物件中的儲存乙份

可以直接被類名呼叫(person.country)

壞處:生命週期過長。

訪問出現侷限性。(只能訪問靜態)

→什麼時候使用靜態呢?

要從兩個方面入手

因為靜態修飾的內容有成員變數和成員方法(函式)

什麼時候定義靜態變數(類變數)呢?

當物件**現共享資料時,該資料被靜態所修飾

物件中的特有資料要定義成非靜態存在於堆記憶體中。

什麼時候定義靜態函式呢?

當功能內部沒有訪問到非靜態資料(物件的特有資料),那麼該功能可以定義為靜態的。

→靜態的應用

每乙個應用程式都有共性的功能

可以將這些功能進行抽取,獨立封裝

以便復用。

把成員方法都定義成static的直接用類名呼叫。

乙個類中會有乙個預設的建構函式,這個建構函式的許可權和所屬的類一致

靜態**塊

格式:static

//特點:隨著類的載入而執行,只執行一次。用於給類進行初始化。

如下例子:

class

staticcode

}載入順序 靜態**塊-->構造**塊-->建構函式

物件的初始化過程

person p = new person("zhangsan",20);

1、因為new用到了person.class

。所以會先找到person.class檔案並載入到記憶體中。

2、執行該類中的static**塊(靜態**塊),如果有的話,給person.class類進行初始化

3、在堆記憶體中開闢空間,非配記憶體位址

4、在堆記憶體中建立物件的特有屬性,並進行預設初始化

5、對屬性進行顯示初始化

6、對物件進行構造**塊初始化

7、對物件進行對應的建構函式初始化

8、將記憶體位址付給棧記憶體中的p變數

static關鍵字的特點

主要從兩個方面做回答,儲存域和作用域 1.第一條也是最重要的一條 隱藏.static函式和static變數均可 當同事編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。舉個例子 同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。a.c char a a void m...

靜態Static關鍵字

靜態關鍵字修飾成員變數 如果乙個成員變數使用了static修飾詞,那麼這個變數就是屬於類的,而不是屬於物件的,多個物件共享乙份資料 public class student public static void setroom string room public student string na...

靜態static關鍵字

static修飾類的屬性,則這個類的所有物件都共享同乙份。一旦使用static修飾成員方法,那麼這就是靜態方法。靜態方法不屬於物件,而是屬於類的。如果沒有static關鍵字,那麼必須首先建立物件,然後通過物件才能訪問它。如果有了static關鍵字,那麼不需要建立物件,直接通過類名來使用它。注意事項 ...