成員變數和類變數的區別

2021-08-10 16:56:30 字數 1641 閱讀 8185

由static修飾的變數成為靜態變數,其實質上就是乙個全域性變數。如果某個內容是被所有物件所共享,那麼該內容就應該用靜態修飾;沒有被靜態修飾的內容,其實是屬於物件的特殊描述。

不同的物件的是例項變數將被分配不同的記憶體空間,如果類的成員變數有類變數,那麼所有都物件的這個類變數都分配給相同的一處記憶體(?什麼叫做類的成員變數有類變數?),改變其中乙個物件的這個類變數會影響到其他物件的這個類變數。也就是說物件共享類變數。

成員變數和類變數的區別:

1、兩個變數的生命週期不同

成員變數隨著物件的建立而存在,隨著物件的**而釋放。

2、呼叫方式不同

成員變數只能被類呼叫。

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

3、別名不同

成員變數也可以成為例項變數。

靜態變數也成為類變數。

4、資料儲存位置不同

成員變數儲存在堆記憶體的物件中,所以也叫物件的特有資料。

鏡頭變數資料儲存在方法區(共享資料區)的靜態區,所以也叫物件的共享資料。

static關鍵字是乙個修飾符,用於修飾成員(成員變數和成員函式)

特點:

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

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

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

弊端:

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

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

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

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

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

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

成員分兩種:

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

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

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

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

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

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

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

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

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

成員變數和靜態變數的區別:

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

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

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

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

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

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

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

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

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

—-很多地方不理解,先mark下

成員變數和類變數的區別

由static修飾的變數稱為靜態變數,其實質上就是乙個全域性變數。如果某個內容是被所有物件所共享,那麼該內容就應該用靜態修飾 沒有被靜態修飾的內容,其實是屬於物件的特殊描述。不同的物件的例項變數將被分配不同的記憶體空間,如果類中的成員變數有類變數,那麼所有物件的這個類變數都分配給相同的一處記憶體,改...

成員變數 類變數 區域性變數的區別

變數名首寫字母使用小寫,如果由多個單詞組成,從第2個單詞開始的其他單詞的首寫字母使用大寫。如果區域性變數的名字和成員變數的名字相同,要想在該方法中使用成員變數,必須使用關鍵字this。成員變數和區域性變數的區別 成員變數 1 成員變數定義在類中,在整個類中都可以被訪問。2 成員變數隨著物件的建立而建...

成員變數 類變數 區域性變數的區別

變數名首寫字母使用小寫,如果由多個單詞組成,從第2個單詞開始的其他單詞的首寫字母使用大寫。如果區域性變數的名字和成員變數的名字相同,要想在該方法中使用成員變數,必須使用關鍵字this class people public void speak public class testthis 輸出結果 ...