为什么静态成员、静态方法中不能用this和super关键字
為什么靜態成員、靜態方法中不能用this和super關鍵字
1.?????在靜態方法中是不能使用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。
轉載于:https://www.cnblogs.com/CrisZjie180228/p/8758925.html
總結
以上是生活随笔為你收集整理的为什么静态成员、静态方法中不能用this和super关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ServiceStack.Redis 请
- 下一篇: BZOJ3998:[TJOI2015]弦