Java 为什么';这';在静态方法中不允许使用?

Java 为什么';这';在静态方法中不允许使用?,java,static,Java,Static,我知道这个表示调用该方法的对象,并且静态方法没有绑定到任何对象,但我的问题是您仍然可以在类对象上调用静态方法 为什么java使这个东西可用而不是用于this?this指向类的当前实例 静态方法与类相关联,而不是与实例相关联,因此,这个没有指向任何对象 下面是一个例子: public class Foo { private String name; public static void someClassMethod() { System.out.println("associ

我知道
这个
表示调用该方法的对象,并且
静态
方法没有绑定到任何对象,但我的问题是您仍然可以在类对象上调用静态方法


为什么java使这个东西可用而不是用于
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.
    }
}

从各个角度来看,
始终意味着此对象,因此给出此类含义的可能性可能会导致多个错误

简单回答:
不是在非静态方法之外定义的


对实例调用静态方法是一种语法速记,我不同意这种说法。

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

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

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

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

虽然您可以调用
h.hasDoor()
,但这有点麻烦,在大多数情况下应该避免

但您仍然可以对类对象调用静态方法/why?@amicingh:因为Java就是这样定义的。因为它是允许的,但正如@Amadan所说的,它不应该存在以使事情更清楚。顺便说一句
这个
不是调用该方法的对象,它是该方法所属的对象。(在静态方法中,
这个
是什么意思?类不是“第一类对象”,不考虑通过
暴露的可能性……我真的希望它们是,但唉,这是Java,而不是Ruby或Python。)+1-我同意。我喜欢将静态方法显式地与它们的类相关联,以明确这一点。那个么为什么java允许你们在类对象上调用静态方法呢?为什么?因为它是为类对象定义的。看起来简单的答案是Java是这样定义的:)@amicingh静态方法在类的所有实例之间共享,所以为什么任何实例都可以调用静态方法。当
this
指向当前实例,并且从静态方法内部调用
this
时,Java如何确定this指向哪个实例?记住,静态方法也可以从另一个类的实例调用。@amingh这确实是一个简单的答案,但正如您已经知道的,为什么要问这个问题?