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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 倚楼听雨 中级黑马   /  2014-8-3 00:08  /  1210 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 倚楼听雨 于 2014-8-5 19:53 编辑

this 代表什么,我在想 为什么不能用在函数static函数中

点评

得到回答后记得编辑帖子为提问结束哦  发表于 2014-8-4 16:25

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

7 个回复

倒序浏览
因为this是个引用,哪个对象调用方法就引用哪个对象。
而静态方法有可能不是被对象调用的,this无从引用。
如果静态方法中使用this的话,this指向的谁呢?

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
因为静态优先于对象存在,所以静态方法中不可以出现this,静态方法创建时,还没有对象。

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
同楼上。静态方法编译时期就已经存在了,可能没有具体对象。this指向本类对象

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
1.this是该(非static)方法的隐藏参数,是当前实例对象的引用。注:编译器在编译(非static)方法时为我们偷偷加上的。
        简单地说在static方法中因为没有传入的隐藏参数this所以不能用。例子如下:

public class Point
{
        int x; int y;
        public Point(/*Point this*/ int x, int y)
       {
                this.x=x; this.y=y;
        }
        /** 当前点(this)到另外点(other)的距离 */
        public double distance( /*Point this*/ Point other)
        {
                int a = this.x-other.x; int b=this.y-other.y;
                return Math.Sqrt(a*a+b*b);
        }
        /** 计算p1和p2之间的距离 */
        public static double distance(Point p1, Point p2)
       {
                int a=p1.x-p2.x; int b=p1.y-p2.y;
                return Math.Sqrt(a*a+b*b);
        }
}

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
路过学习了!
回复 使用道具 举报
this代表当前类的对像,而静态类不能创建对象也就不能使用this
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马