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这确实是一个简单的答案,但正如您已经知道的,为什么要问这个问题?