.
在靜態方法中是不能使用
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...