-3

在 java 中,我的教授告诉我们,您不能在静态方法中使用非静态类成员。他还说你不能在静态方法中使用“this”关键字。这是为什么?

4

5 回答 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知道关于类的一切,所以对象可以访问所有的静态方法类。
并且classno关于它objects的信息,这就是静态方法不能访问对象成员的原因。

于 2013-09-29T03:53:55.397 回答