静态方法中的非静态成员

时间:2013-09-29 00:55:16

标签: java

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

5 个答案:

答案 0 :(得分:1)

非静态类成员和this与类的实例相关联,而静态方法与类本身没有关联。

答案 1 :(得分:1)

您不能在静态方法中使用非静态变量,因为可以在不实例化(基于..创建对象)的情况下执行静态方法。由于非静态变量可以通过使用对象的方法进行更改,因此非静态变量特定于对象。因为您可以多次实例化一个类来创建多个对象,您可以使用这些对象来更改属于对象的非静态变量,这个非静态变量将有多个值。如果静态方法能够访问非静态变量,则它不知道要使用哪个值。因此,为什么它无法使用它。

对于thisthis指的是属于该对象的非静态变量。由于您无法从静态方法访问非静态变量,因此不应在静态方法中调用this

答案 2 :(得分: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?
}

答案 3 :(得分:0)

因为非静态成员和this关键字都引用了对象的实例。静态方法属于到类,而不属于实例,所以这两个东西在所述上下文中并不意味着什么。

答案 4 :(得分:0)

非静态类成员和this关键字与类对象和与类相关的静态方法相关 事情是objects知道关于类的所有内容,因此对象可以访问所有静态方法类 class有关于no的{​​{1}}信息,这就是静态方法无法访问对象成员的原因。