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