在 java 中,我的教授告诉我们,您不能在静态方法中使用非静态类成员。他还说你不能在静态方法中使用“this”关键字。这是为什么?
问问题
108 次
5 回答
2
非静态类成员与类this
的实例相关联,而静态方法不与任何实例相关联,而是与类本身相关联。
于 2013-09-29T00:57:43.357 回答
1
您不能在静态方法中使用非静态变量,因为可以在不实例化(基于...创建对象)类的情况下执行静态方法。由于非静态变量可以通过使用对象的方法进行更改,因此非静态变量是特定于对象的。因为您可以多次实例化一个类以创建多个对象,您可以使用这些对象使用方法来更改属于对象的非静态变量,因此该非静态变量将有多个值。如果静态方法能够访问非静态变量,它就不会知道使用哪个值。因此,为什么它无法使用它。
至于this
, 是this
指属于对象的非静态变量。由于您无法从静态方法访问非静态变量,因此不应调用this
静态方法。
于 2013-09-29T01:28:57.820 回答
1
有时一个例子会有所帮助。考虑这个类:
class Foo {
int bar; // non-static member
Foo(int bar) {
this.bar = bar;
}
static int getBar() {
return bar; // invalid - what if we have many Foos with different bars?
}
}
现在想象一下尝试使用这个类:
public static void main(String[] args) {
Foo foo1 = new Foo(1); // bar is 1 in this instance
Foo foo2 = new Foo(2); // bar is 2 in this instance
int bar = Foo.getBar(); // which instance of Foo would we get bar from?
}
于 2013-09-29T03:02:06.810 回答
0
因为非静态成员和this
关键字都引用对象的实例。静态方法属于class,而不属于 instance ,因此这两件事在所述上下文中没有任何意义。
于 2013-09-29T00:57:52.427 回答
0
非静态类成员和this
关键字与类对象和与类相关的静态方法相关。
事情是objects
知道关于类的一切,所以对象可以访问所有的静态方法类。
并且class
有no
关于它objects
的信息,这就是静态方法不能访问对象成员的原因。
于 2013-09-29T03:53:55.397 回答