黑马程序员技术交流社区

标题: "This"为什么不能用在函数static中? [打印本页]

作者: 倚楼听雨    时间: 2014-8-3 00:08
标题: "This"为什么不能用在函数static中?
本帖最后由 倚楼听雨 于 2014-8-5 19:53 编辑

this 代表什么,我在想 为什么不能用在函数static函数中
作者: 向晓伟    时间: 2014-8-3 00:40
因为this是个引用,哪个对象调用方法就引用哪个对象。
而静态方法有可能不是被对象调用的,this无从引用。
如果静态方法中使用this的话,this指向的谁呢?
作者: tommy    时间: 2014-8-3 00:49
因为静态优先于对象存在,所以静态方法中不可以出现this,静态方法创建时,还没有对象。

作者: 为爱编程    时间: 2014-8-3 08:54
同楼上。静态方法编译时期就已经存在了,可能没有具体对象。this指向本类对象
作者: lingyue    时间: 2014-8-3 21:00
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);
        }
}

作者: 麦田怪圈    时间: 2014-8-4 16:04
路过学习了!
作者: 傅磊    时间: 2014-8-4 16:41
this代表当前类的对像,而静态类不能创建对象也就不能使用this




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