在java中,我的教授告诉我们,你不能在静态方法中使用非静态类成员。他还说你不能在静态方法中使用“this”关键字。那是为什么?
答案 0 :(得分:1)
非静态类成员和this
与类的实例相关联,而静态方法与类本身没有关联。
答案 1 :(得分:1)
您不能在静态方法中使用非静态变量,因为可以在不实例化(基于..创建对象)的情况下执行静态方法。由于非静态变量可以通过使用对象的方法进行更改,因此非静态变量特定于对象。因为您可以多次实例化一个类来创建多个对象,您可以使用这些对象来更改属于对象的非静态变量,这个非静态变量将有多个值。如果静态方法能够访问非静态变量,则它不知道要使用哪个值。因此,为什么它无法使用它。
对于this
,this
指的是属于该对象的非静态变量。由于您无法从静态方法访问非静态变量,因此不应在静态方法中调用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}}信息,这就是静态方法无法访问对象成员的原因。