为什么'这个'在静态方法中是不允许的?

时间:2012-06-16 23:06:25

标签: java static

我知道this表示调用该方法的对象,static方法没有绑定到任何对象,但我的问题仍然是你可以在类对象上调用静态方法。

为什么java使这个东西可用而不是this

4 个答案:

答案 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(),但这有点令人讨厌,在大多数情况下都应该避免