黑马程序员技术交流社区

标题: 静态方法 [打印本页]

作者: 251855915    时间: 2016-4-11 11:09
标题: 静态方法
为什么静态方法不可以定义this,super关键字?不可以调用父类吗?请大神解答
作者: a2015272261    时间: 2016-4-11 11:50
静态方法可以直接通过类名调用,任何的实例也都可以调用, 因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),
作者: a2015272261    时间: 2016-4-11 11:52
静态方法可以直接通过类名调用,任何的实例也都可以调用, 因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法)
作者: psuugdufnm    时间: 2016-4-11 12:57
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, int x)
而静态方法与对象无关,根本不能把对象的引用传到方法中,所以不能用this


4.      在一个类中定义一个方法为static,则为静态方法,那就是说,无需本类的对象即可调用此方法,调用一个静态方法就是“类名.方法名”

既然"无需本类的对象即可调用静态方法",而this和super关键字都是用于本类对象的-----调用静态方法无需本类的对象这句话很清楚表明:静态方法中不能用this和super关键字

5.      静态方法是存放在内存中的数据段里,this和super调用的是堆空间里的应用对象不能调用数据段区域里的数据,因此静态方法中不能用this和super关键字

6.      静态方法和静态类不属于单个对象,而是类的所有对象共享使用
而this代表当前对象

7.    东西只属于类,不属于任何对象,所以不能用THIS和SUPER。




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