1. 程式人生 > >為什麼靜態成員、靜態方法(static)中不能用this和super關鍵字

為什麼靜態成員、靜態方法(static)中不能用this和super關鍵字

因為this代表的是呼叫這個函式的物件的引用,而靜態方法是屬於類的,不屬於物件,靜態方法成功載入後,物件還不一定存在 
在問題之前先講super的用法:1.super的用法跟this類似,this代表對本類物件的引用,指向本類已經建立的物件;而super代表對父類物件的引用,指向父類物件;2.靜態優先於物件存在;3.由上面的1.和2.知:因為靜態優先於物件存在,所以方法被靜態修飾之後方法先存在,而方法裡面要用到super指向的父類物件,但是所需的父類引用物件晚於該方法出現,也就是super所指向的物件沒有,當然就會出錯。綜上,靜態方法中不可以出現super關鍵字。 
首先要明白物件和類的區別。 this和super是屬於物件範疇的東西,而靜態方法是屬於類範疇的東西所有的成員方法,都有一個預設的的引數this(即使是無參的方法),只要是成員方法,編譯器就會給你加上this這個引數如:
Class A中 void method1(){}實際上是這樣的--------> void method1(A this)
void method2(int x){}實際上是這樣的--------> void method2(A this, int x)
而靜態方法與物件無關,根本不能把物件的引用傳到方法中,所以不能用this
在一個類中定義一個方法為static,則為靜態方法,那就是說,無需本類的物件即可呼叫此方法,呼叫一個靜態方法就是“類名.方法名”

轉自百度百科