-2

我知道this代表调用方法的对象,并且static方法未绑定到任何对象,但我的问题仍然是您可以在类对象上调用静态方法。

为什么 java 提供了这个东西而不是 for this

4

4 回答 4

9

this指向类的当前实例。

静态方法与一个类相关联,而不是与一个实例相关联,因此没有什么this可以指向的。

这是一个例子:

public class Foo {
    private String name; 

    public static void someClassMethod() { System.out.println("associated with a class"); }

    public Foo(String n) { this.name = n; }

    public String getName() { return this.name; }
    public void setName(String n) { this.name = n; }
    public void doAnotherThing() { 
       Foo.someClassMethod();   // This is what is really happening when you call a static method in an non-static method.
    }
}
于 2012-06-16T23:09:11.250 回答
4

简单的答案:this没有在非静态方法之外定义。

在实例上调用静态方法是一种语法简写,我不同意它应该存在。

于 2012-06-16T23:10:23.143 回答
1

从每个角度来看,this总是意味着这个对象,所以给这个类赋予意义的可能性可能会导致多个错误

于 2012-06-16T23:09:59.660 回答
1

这里的区别在于对象之间。对对象调用非静态方法,对类调用静态方法。

您可以将类视为构建对象的蓝图。一个类House有一个静态方法hasDoor()(它将返回true),而该类型的对象House可以有一个方法openDoor()。你无法打开蓝图的大门。

一个可以打电话House.hasDoor(),但不能House.openDoor()。一个可以打电话

House h = new House();
h.openDoor();

虽然你可以打电话h.hasDoor(),但这有点讨厌,在大多数情况下应该避免

于 2012-06-16T23:13:17.163 回答