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的用法