为什么静态成员、静态方法中不能用this和super关键字

原创 2016年08月29日 08:45:23
因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,对象还不一定存在 .
在问题之前先讲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, int x)
而静态方法与对象无关,根本不能把对象的引用传到方法中,所以不能用this
4. 在一个类中定义一个方法为static,则为静态方法,那就是说,无需本类的对象即可调用此方法,调用一个静态方法就是“类名.方法名”
版权声明:本文为博主原创文章,未经博主允许不得转载。

java中静态方法中为什么不能使用this、super和直接调用非静态方法

这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆...
  • ZhangWangYang
  • ZhangWangYang
  • 2016年05月04日 23:24
  • 6489

为什么静态成员、静态方法中不能用this和super关键字

为什么静态成员、静态方法中不能用this和super关键字 1.     在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行. 因为this代表的是调用这...
  • u010479322
  • u010479322
  • 2016年06月21日 21:25
  • 5244

深入this关键字(静态方法中不能调用非静态成员的解释)

在本文的开头,非常感谢Thining in JAVA这本书给我的启发,大师就是大师,正是因为有了你们这些大师对基础的极致追求,我们这些菜鸟才少走了很多弯路,BY THE WAY: 陈昊鹏翻译的那个有...
  • iverson89w
  • iverson89w
  • 2015年04月26日 14:24
  • 1134

为什么静态成员、静态方法中不能用this和super关键字

1.      在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行. 因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加...
  • Jacob1_1
  • Jacob1_1
  • 2016年08月28日 19:39
  • 208

为什么静态方法中不能使用this和super关键字

转载:点击打开链接 1.      在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行. 因为this代表的是调用这个函数的对象的引用,而静态方法...
  • FightingBoyws
  • FightingBoyws
  • 2017年03月18日 16:38
  • 462

静态方法为什么不能用this和super

.     在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行. 因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后...
  • a327037419
  • a327037419
  • 2015年10月17日 12:47
  • 396

黑马程序员------静态方法中为什么不能写this和super?这两者之间的区别是什么呢? Day02

1.      在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行. 因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加...
  • love_Javc_you
  • love_Javc_you
  • 2014年04月14日 23:20
  • 1479

静态方法,静态成员变量的调用

  • 2015年05月12日 15:09
  • 19KB
  • 下载

为什么静态方法不能直接访问非静态成员?

static成员是在JVM的CLASSLOADER加载类的时候初始化的,而非static的成员是在创建对象,即new 操作的时候才初始化的;类加载的时候初始化static的成员,此时static 已经...
  • sunzhifeng1989
  • sunzhifeng1989
  • 2014年02月19日 12:46
  • 5401

为什么静态方法不能直接访问非静态成员

static成员是在JVM的CLASSLOADER加载类的时候初始化的,而非static的成员是在创建对象,即new 操作的时候才初始化的;类加载的时候初始化static的成员,此时static 已经...
  • u011328417
  • u011328417
  • 2017年07月28日 19:09
  • 129
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为什么静态成员、静态方法中不能用this和super关键字
举报原因:
原因补充:

(最多只允许输入30个字)