static與非static的區別

2021-08-18 00:10:08 字數 997 閱讀 4595

關於static和非static變數的區別。

1. static 修飾的變數稱為類變數或全域性變數或成員變數,在類被載入的時候成員變數即被初始化,與類關聯,只要類存在,static變數就存在。非static修飾的成員變數是在物件new出來的時候劃分儲存空間,是與具體的物件繫結的,該成員變數僅為當前物件所擁有的。

2. static修飾的變數在載入的時候先於main方法載入在記憶體中的資料共享區-------方法區,而非static的變數在載入的時候,是要建立變數才載入在堆記憶體中的。

3. 乙個static變數單獨劃分一塊儲存空間,不與具體的物件繫結在一起,該儲存空間被類的各個物件所共享。static變數值在方法區載入一次,而非static在建立物件時會載入很多次。每次建立都會拷貝乙份。

4. 物件在引用成員變數是直接通過類名.變數名呼叫,物件在引用例項變數時只能通過物件名.變數名呼叫。

5. 在類中呼叫成員變數時直接呼叫或者以類名.變數名方式呼叫,例項變數則用this或者直接呼叫。

關於static方法和非static方法的區別

1. static修飾的方法也和static一樣。先於main方法被載入到方法區,以便共享使用。

2. 靜態的static方法中不能使用this或者super關鍵字,因為static方法是先於物件建立之前就已經載入的方法,是屬於類的方法,而this和super指向的是本類的物件或者父類的物件,非靜態的方法是屬於物件的,方法裡可以用this和super。

3. static方法可以用物件.方法名來呼叫,也可以用類名.方法名來呼叫。而非靜態的方法只能建立物件後時呼叫。

4. static方法是載入一次,被所有的物件所共享。而非靜態方法是有多少個物件就拷貝多少次,每個物件只能呼叫自己的拷貝的方法。

5. 物件呼叫非靜態的方法時,不考慮執行緒安全性的問題,而呼叫靜態方法時,要考慮安全性的問題。因為靜態方法只有乙份。而物件的方法是自己有自己的。

6. 同乙個類中,靜態方法中只能訪問類中的靜態成員。而非靜態方法可以訪問非靜態的方法(使用類名呼叫,或者創建立本類的物件呼叫)。

static 與非static修飾的區別

請簡述static 與非static修飾的區別 作用在方法上,方法的區別 static方法屬於類,不屬於類的例項物件,而非static方法屬於類的例項物件,不屬於類,static方法不需要例項物件就可以通過類名呼叫,且static方法中不能有例項成員 即例項方法或例項變數 而非static方法中可以...

JAVA之static與非static區別

關於static和非static變數的區別。static 修飾的變數稱為類變數或全域性變數或成員變數,在類被載入的時候成員變數即被初始化,與類關聯,只要類存在,static變數就存在。非static修飾的成員變數是在物件new出來的時候劃分儲存空間,是與具體的物件繫結的,該成員變數僅為當前物件所擁有...

static成員和非static成員

1.靜態成員 1 所有的static方法不允許呼叫非static定義的屬性或方法,因為靜態函式成員屬於類的成員,例項成員變數是屬於某個物件的,而靜態方法在執行時,並不一定存在物件,但是靜態方法可以使用靜態變數 2 描述共享屬性,只需在屬性前新增static關鍵字即可,建立乙個類的多個例項,其stat...