黑马程序员技术交流社区

标题: 为什么在一个静态方法中不能使用super关键字? [打印本页]

作者: 王燕飞    时间: 2014-11-14 22:16
标题: 为什么在一个静态方法中不能使用super关键字?
请大神们给解惑啊!!!
作者: 聪明叉    时间: 2014-11-14 22:27
因为静态引用的对象也必须是静态
作者: 王燕飞    时间: 2014-11-14 22:36
聪明叉 发表于 2014-11-14 22:27
因为静态引用的对象也必须是静态

听过静态变量和静态方法,这个静态对象是什么东东???
作者: rel4x    时间: 2014-11-14 22:45
因为静态方法储存在方法区,优先于对象存在
作者: 焦旭宁1    时间: 2014-11-14 22:45
学习!!11
作者: 田峻菘    时间: 2014-11-14 23:28
static特点:
1,被static修饰会随着类的加载而加载,随着类的消失而消失。生命周期长。
2,静态优先于的对象存在,所以静态方法中不可以定义this,super关键字。
3,被所有对象所共享。
4,可以直接被类名所调用。

作者: 加油    时间: 2014-11-15 00:23
因为静态不能调用非静态方法,静态比对象先进内存
作者: Sxxjava    时间: 2014-11-15 01:29
因为静态是类一进内存就有了,那个时候你非静态的都还没有呢,怎么可能调用呢
作者: DamonZh    时间: 2014-11-15 08:25
因为静态的内容在加载类时就已经存在 而super是对象的引用 所以可能不存在
作者: 完美是芬    时间: 2014-11-15 09:14
super代表对父类对象的引用,指向父类对象;因为静态优先于对象存在,所以方法被静态修饰之后方法先存在,方法里面用super指向的是父类对象,但是所需的父类引用对象晚于该方法出现,也就是super所指向的对象没有,当然就会出错。也可以理解为静态方法是在栈内存里随着类的加载就存在,super调用的是堆内存里的应用对象,不是调用栈内存里的,此时堆内存里的对象还没有,因此静态方法中不能用super关键字
作者: 菜鸟一号    时间: 2014-11-15 09:33
rel4x 发表于 2014-11-14 22:45
因为静态方法储存在方法区,优先于对象存在

这位大哥说得太对了
作者: 菜鸟一号    时间: 2014-11-15 09:34
rel4x 发表于 2014-11-14 22:45
因为静态方法储存在方法区,优先于对象存在

这位大哥说得太对了
作者: zhangyangLengen    时间: 2014-11-15 09:42
静态方法是在方法区中的静态方法区中,和栈不一样,整个程序运行时,如果调用哪个方法,会将那个方法从方法区中进栈。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2