当前位置: 代码迷 >> J2SE >> 关于this的用法
  详细解决方案

关于this的用法

热度:91   发布时间:2016-04-23 20:00:32.0
求助 关于this的用法
 class TestPoint
{
double x;
double y;
double z;
TestPoint(double x, double y, double z)
{
this.x = x;
this.y = y;
this.z = z;
}
public double distance(TestPoint p)
{
double d=0;
d = Math.pow(p.x,2)+Math.pow(p.y,2)+Math.pow(p.z,2);
return d;
}
public static void main(String[] args)
{
TestPoint p1 = new TestPoint(0.5,1,2);
System.out.println(p1.distance(this));  //这一行报错
}
}

上述程序中,红字那一行报错,如果改成System.out.println(p1.distance(p1))就没错;。this关键字不是能代表使用该方法的对象的引用吗?我这样用错在哪里呢?谢谢!
------解决思路----------------------
如果你的方法中再new 一个 p2 出来呢,那么你的this该指代谁呢
this 指代的对象,是指this在非静态方法中,可以指代这个方法所属的对象
像 构造方法中的this,其实就是java默认构造的新对象,this. 后面可以跟上它的属性


public static void main(String[] args) {
String str = new String("abc");
System.out.println(str.equals("ABC"));
}

这里的equals 方法里面

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

里面的this 就指代的是当前方法所属的对象,上面的代码里面指代的就是 str 
------解决思路----------------------
静态方法是属于类的,在实例化对象之前就可以使用的,不能使用this。
------解决思路----------------------
不是说的很明白了吗?

在静态方法中不能引用非静态的变量。因为静态方法会在该实例初始化之前执行。
------解决思路----------------------
建议先去看看static的用法
  相关解决方案