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

2021-08-14 07:08:41 字數 2454 閱讀 4009

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

* 變數名首寫字母使用小寫,如果由多個單詞組成,從第2個單詞開始的其他單詞的首寫字母使用大寫。

* 如果區域性變數的名字和成員變數的名字相同, 要想在該方法中使用成員變數,必須使用關鍵字this

class people   

public void speak()   

}  public class testthis   

} ### 成員變數和區域性變數的區別

* 成員變數:

* 1、成員變數定義在類中,在整個類中都可以被訪問。

* 2、成員變數隨著物件的建立而建立,隨著物件的消失而消失,存在於物件所在的堆記憶體中。

* 3、成員變數有預設初始化值。

* 區域性變數:

* 1、區域性變數只定義在區域性範圍內,如:函式內,語句內等,只在所屬的區域有效。

* 2、區域性變數存在於棧記憶體中,作用的範圍結束,變數空間會自動釋放。

* 3、區域性變數沒有預設初始化值 

* 在使用變數時需要遵循的原則為:就近原則

* 首先在區域性範圍找,有就使用;接著在成員位置找。

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

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

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

class myadd   

public void myaddmethod()   

public void staticaddmethod()   

}  public class testthis   

}  輸出結果:1 1 2 1 2 3

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

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

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

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

* 2、呼叫方式不同

* 成員變數只能被物件呼叫。

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

* 3、別名不同

* 成員變數也稱為例項變數。

* 靜態變數也稱為類變數。

* 4、資料儲存位置不同

* 成員變數儲存在

**堆記憶體的物件中**,所以也叫物件的特有資料。

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

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

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

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

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

* 弊端:

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

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

* 因為

**靜態方法載入時,優先於物件存在**,所以沒有辦法訪問物件中的成員,除非建立乙個物件。

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

* 因為

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

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

* 成員分兩種:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

成員變數 區域性變數 package com.test public class myadd public void myaddmethod public void staticaddmethod public static void main string args 輸出結果 add1呼叫成員變數...