1

我正在学习 Java,并正在阅读文档。

此页面上有一行我无法理解 -

...此外,类方法不能使用 this 关键字,因为没有实例可供 this 引用。...

我认为只有静态类方法不能使用this关键字。

为了测试这一点,我编写了以下代码,它可以编译。

import java.math.*;

class Point {

    public int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public double getDistanceFromOrigin() {
        return Math.sqrt(this.x*this.x + this.y*this.y);
    }

}

我有一个类,其中一个方法引用this.

我是否以某种方式误解了事物?

4

5 回答 5

5

类方法静态方法。“类方法”是绑定到类定义(使用static关键字)的方法,与您编写的对象/实例方法相反,您可以在基于该类构建的对象上调用它们。

您编写的代码有两个对象/实例方法,没有类方法。如果您想要 Java 中的类方法,则将其设为静态,然后您不能使用this.

于 2013-06-20T16:34:58.913 回答
1

您正在使用this将引用当前实例的实例方法。

public double getDistanceFromOrigin() {
    return Math.sqrt(this.x*this.x + this.y*this.y);
}

如果将方法更改为静态方法,this则将不可用,因为静态方法与类相关联,而不是与类的特定实例相关联,而this如果在方法内部使用,则指类的当前实例。

public static double getDistanceFromOrigin() {
    return Math.sqrt(this.x*this.x + this.y*this.y); // compilation error here
}
于 2013-06-20T16:35:15.117 回答
1

在阅读了您发布的链接上的内容后,似乎使用措辞Class methods来指代静态方法


类方法

Java 编程语言支持静态方法和静态变量。声明中带有 static 修饰符的静态方法应该使用类名调用,而不需要创建类的实例,如

您不能this在静态方法中使用,因为没有要引用的实例(no this)。

于 2013-06-20T16:35:15.497 回答
1

我认为只有static类方法不能使用this关键字。

你是对的。类中的static方法属于类,不属于对象引用。所以为了证明你的句子,只需添加一个static方法并this在其中使用关键字。例如:

class Point {

    public int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public double getDistanceFromOrigin() {
        return Math.sqrt(this.x*this.x + this.y*this.y);
    }

    public static double getDistanceBetweenPoints(Point point1, Point point2) {
        //uncomment and it won't compile
        //double result = this.x;
        //fancy implementation...
        return 0;
    }

}
于 2013-06-20T16:33:39.253 回答
1

您是对的,只有static类方法不能使用this关键字,但是您的代码示例是非静态的,因此this完全有效。

于 2013-06-20T16:34:20.130 回答