黑马程序员技术交流社区
标题:
静态函数为什么不能引用this?
[打印本页]
作者:
刘煜
时间:
2012-6-12 14:47
标题:
静态函数为什么不能引用this?
为什么静态函数中不能使用this?
作者:
郑冬
时间:
2012-6-12 14:57
静态方法是跟实例无关的方法,只跟类有关,在类没有实例的时候就可以使用其静态方法。静态方法不能操作非静态变量,因为非静态变量是跟实例相关的,每个实例的非静态变量都不同,而类的静态变量是所有实例共有的。this是跟实例相关的,它就是当前调用该方法的实例的引用,这跟静态方法矛盾。而一般的方法可以操作静态变量,一般的方法必须由类的实例的引用调用,在没有实例的时候是没法调用的。
作者:
孙峰
时间:
2012-6-12 14:59
因为静态函数在类被实例化之前就被调用, 而this 只有在对象建立后才指代对象。所以静态函数中不能有this ,super关键字
作者:
郭宁
时间:
2012-6-12 14:59
静态存在的时候 对象还没有实例, this 你打算让它指向哪里?
作者:
邓杰
时间:
2012-6-12 15:01
this是代表本类引用,在堆内存中;有了对象才有this。static方法在方法区中。被static修饰的成员随着类的加载而加载,可以直接类名调用;
也就是说他是先于对象存在的;对象都不存在,怎么用this调用呢;
举例
class A
{
public static void demo(String s)
{
//this.demo();//这个时候的A对象都不存在,怎么可以调用呢;
//所以JVM会提示你静态不能调用非静态成员;
System.out.println(s);
}
public void demo2(int i )
{
System.out.println(i);
}
}
class BA
{
public static void main(String[] args)
{
A.demo("haha");//它是静态方法随着类的加载而加载;所以可以类名直接调用;
}
}
作者:
逝去的记忆ヽ
时间:
2012-6-12 15:20
静态方法是跟实例无关的方法,只跟类有关,在类没有实例的时候就可以使用其静态方法。
静态方法不能操作非静态变量也不能调用非静态方法。
也就是说静态方法是随着类的加载而加载的,这时候还没有对象存在 那么静态方法中如何存在this呢
所以不可能在静态中存在this、
希望对你有帮助。
作者:
李海
时间:
2012-6-12 15:21
因为静态函数是由于对象先存在的 this代替的就是调用当前的那个对象 你在静态函数中 使用this是没有意义的
作者:
王广丛
时间:
2012-6-12 16:25
静态的方法是存储与独立的区域的,不依附于对象的,因此才有了可以使用“类名.方法名”的调用方法;
正式由于他独立存在,不依附 与对象,所以不能说他是某个对象的方法,而this是依赖于某个对系那个的
this.属性:表示的是这个对象的属性,既然这个静态方法不依赖于对象自然也就不能应用this这个关键词了。
希望能有帮到你理解。
作者:
黑马-王言龙
时间:
2012-6-12 16:43
本帖最后由 wyl530274554 于 2012-6-12 16:45 编辑
内存中,静态的东东,先于对象而存在,规定不可以
作者:
郭永岳
时间:
2012-6-12 19:56
首先,你要先了解static方法。
1、声明为static的方法称为静态方法或类方法。静态方法可以直接调用静态方法,访问静态变量,但是不能直接访问实例变量和实例方法。
2、声明为static的变量称为静态变量或类变量。可以直接通过类名引用静态变量,也可以通过实例名来引用静态变量,但最好采用前者,因为后者容易混淆静态变量和一般变量。静态变量是跟类相关联的,类的所有实例共同拥有一个静态变量。
所以,静态方法中不能使用this关键字,因为静态方法不属于任何一个实例。静态方法不能被子类的静态方法覆盖。
作者:
陌花╮有意、
时间:
2012-6-12 22:45
静态函数是与具体实例无关的,可直接通过类名调用
作者:
马东华
时间:
2012-6-12 22:48
this指代的当前调用该方法的对象,而静态方法是在类加载的时候就加载的,类加载时,对象还没有确定,所以静态方法不能使用this
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2