靜態方法為什麼不能用this和super

2021-07-05 22:34:12 字數 1325 閱讀 1055

.

在靜態方法中是不能使用

this

預定義物件引用的

,即使其後邊所操作的也是靜態成員也不行.因為

this

代表的是呼叫這個函式的物件的引用

,而靜態方法是屬於類的

,不屬於物件

,靜態方法成功載入後

,物件還不一定存在 2.

在問題之前先講super的用法:

1.super的用法跟this類似,this代表對本類物件的引用,指向本類已經建立的物件;而super代表對父類物件的引用,指向父類物件;

2.靜態優先於物件存在;

3.由上面的1.和2.知:

因為靜態優先於物件存在,所以方法被靜態修飾之後方法先存在,而方法裡面要用到super指向的父類物件,但是所需的父類引用物件晚於該方法出現,也就是super所指向的物件沒有,當然就會出錯。

綜上,靜態方法中不可以出現super關鍵字。

3. 首先你要明白物件和類的區別。

this和super是屬於物件範疇的東西,而靜態方法是屬於類範疇的東西

所有的成員方法,都有乙個預設的的引數this(即使是無參的方法),只要是成員方法,編譯器就會給你加上this這個引數如:

class a中

void method1(){}實際上是這樣的--------> void method1(a this)

void method2(int x){}實際上是這樣的--------> void method2(a this, intx)

而靜態方法與物件無關,根本不能把物件的引用傳到方法中,所以不能用this

4.在乙個類中定義乙個方法為

static

,則為靜態方法,那就是說,無需本類的物件即可呼叫此方法,呼叫乙個靜態方法就是「類名

.方法名」既然

"無需本類的物件即可呼叫靜態方法",而

this

和super

關鍵字都是用於本類物件的-----呼叫靜態方法無需本類的物件這句話很清楚表明:靜態方法中不能用

this

和super

關鍵字

5.靜態方法是存放在記憶體中的資料段裡,

this

和super

呼叫的是堆空間裡的應用物件不能呼叫資料段區域裡的資料,因此靜態方法中不能用

this

和super

關鍵字

6.靜態方法和靜態類不屬於單個物件,而是類的所有物件共享使用

而this

代表當前物件 7.

東西只屬於類,不屬於任何物件,所以不能用

this

和super

aspen為什麼不能用 地坪漆為什麼不能用在室內?

在很多的營銷號中,人們常說地坪漆為什麼不能在室內使用。但是這種說法是錯誤的,地坪漆的種類居多,不同的地坪的使用地方也不同。不同材料的地坪漆使用的地方也不同,比如在化工廠用在室內的話,那肯定是不可以的。下面我們來解析一下室內地坪。一 工程部位 室內地坪 二 地面施工工藝 基層處理 找標高 彈線 灑水濕...

為什麼靜態方法不能呼叫非靜態方法?

1.靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在。2.當你建立乙個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依賴於物件的呼叫,它是...

靜態方法為什麼不能被重寫

首先我們來測試,猜下下面程式的執行結果.1 該類測試靜態方法為什麼不能被重寫 2public class test1 static 13 1415 16class father 20 2122 class child extends father 26 列印結果 fathermethod child...