A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘煜 中级黑马   /  2012-6-12 14:47  /  3389 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么静态函数中不能使用this?

11 个回复

倒序浏览
静态方法是跟实例无关的方法,只跟类有关,在类没有实例的时候就可以使用其静态方法。静态方法不能操作非静态变量,因为非静态变量是跟实例相关的,每个实例的非静态变量都不同,而类的静态变量是所有实例共有的。this是跟实例相关的,它就是当前调用该方法的实例的引用,这跟静态方法矛盾。而一般的方法可以操作静态变量,一般的方法必须由类的实例的引用调用,在没有实例的时候是没法调用的。
回复 使用道具 举报
因为静态函数在类被实例化之前就被调用, 而this 只有在对象建立后才指代对象。所以静态函数中不能有this  ,super关键字
回复 使用道具 举报
静态存在的时候  对象还没有实例, this 你打算让它指向哪里?
回复 使用道具 举报
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");//它是静态方法随着类的加载而加载;所以可以类名直接调用;

        }
}
回复 使用道具 举报
静态方法是跟实例无关的方法,只跟类有关,在类没有实例的时候就可以使用其静态方法。
静态方法不能操作非静态变量也不能调用非静态方法。
也就是说静态方法是随着类的加载而加载的,这时候还没有对象存在 那么静态方法中如何存在this呢
所以不可能在静态中存在this、
希望对你有帮助。

回复 使用道具 举报
李海 中级黑马 2012-6-12 15:21:36
7#
   因为静态函数是由于对象先存在的  this代替的就是调用当前的那个对象   你在静态函数中  使用this是没有意义的
回复 使用道具 举报
静态的方法是存储与独立的区域的,不依附于对象的,因此才有了可以使用“类名.方法名”的调用方法;
正式由于他独立存在,不依附 与对象,所以不能说他是某个对象的方法,而this是依赖于某个对系那个的
this.属性:表示的是这个对象的属性,既然这个静态方法不依赖于对象自然也就不能应用this这个关键词了。
希望能有帮到你理解。
回复 使用道具 举报
本帖最后由 wyl530274554 于 2012-6-12 16:45 编辑

内存中,静态的东东,先于对象而存在,规定不可以
回复 使用道具 举报
首先,你要先了解static方法。
1、声明为static的方法称为静态方法或类方法。静态方法可以直接调用静态方法,访问静态变量,但是不能直接访问实例变量和实例方法。
2、声明为static的变量称为静态变量或类变量。可以直接通过类名引用静态变量,也可以通过实例名来引用静态变量,但最好采用前者,因为后者容易混淆静态变量和一般变量。静态变量是跟类相关联的,类的所有实例共同拥有一个静态变量。

所以,静态方法中不能使用this关键字,因为静态方法不属于任何一个实例。静态方法不能被子类的静态方法覆盖。
回复 使用道具 举报
静态函数是与具体实例无关的,可直接通过类名调用
回复 使用道具 举报
this指代的当前调用该方法的对象,而静态方法是在类加载的时候就加载的,类加载时,对象还没有确定,所以静态方法不能使用this
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马