我知道this
代表调用方法的对象,并且static
方法未绑定到任何对象,但我的问题仍然是您可以在类对象上调用静态方法。
为什么 java 提供了这个东西而不是 for this
?
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.
}
}
简单的答案:this
没有在非静态方法之外定义。
在实例上调用静态方法是一种语法简写,我不同意它应该存在。
从每个角度来看,this
总是意味着这个对象,所以给这个类赋予意义的可能性可能会导致多个错误
这里的区别在于类和对象之间。对对象调用非静态方法,对类调用静态方法。
您可以将类视为构建对象的蓝图。一个类House
有一个静态方法hasDoor()
(它将返回true
),而该类型的对象House
可以有一个方法openDoor()
。你无法打开蓝图的大门。
一个可以打电话House.hasDoor()
,但不能House.openDoor()
。一个可以打电话
House h = new House();
h.openDoor();
虽然你可以打电话h.hasDoor()
,但这有点讨厌,在大多数情况下应该避免