在java中,我的proffesor告诉我们你不能在静态方法内使用非静态类成员。他还表示,你不能在静态方法中使用“this”关键字。这是为什么?静态方法内的非静态成员
-3
A
回答
1
非静态类成员和this
与类的实例关联,而静态方法不与任何实例关联,但与类本身关联。
0
因为非静态成员和this
关键字都指对象的实例。静态方法属于类,而不是实例,所以这两件事在上下文中并不意味着什么。
1
不能在静态方法中使用非静态变量,因为静态方法可以在没有实例化的情况下执行(创建基于..的对象)类。由于非静态变量可以通过使用对象的方法来改变,所以非静态变量是特定于对象的。因为您可以多次实例化一个类以创建多个对象,通过这些对象可以使用方法更改属于这些对象的非静态变量,所以对于此非静态变量会有多个值。如果静态方法能够访问非静态变量,它将不知道使用哪个值。因此为什么它不能使用它。
至于this
,this
引用属于该对象的非静态变量。由于您无法从静态方法访问非静态变量,因此您不应使用静态方法调用this
。
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?
}
}
现在想象attemping使用这个类:
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?
}
0
非静态类成员和this
关键字与类对象和相关类的静态方法有关。
事情是objects
知道关于类的一切,所以对象可以访问所有的静态方法类。
和class
有no
有关其objects
的信息,这就是为什么静态方法无法访问对象的成员。
相关问题
- 1. 非静态类的静态成员?
- 2. 从静态方法访问非静态成员变量
- 3. 静态Vs非静态方法和成员交互
- 4. 静态方法是指非静态成员?
- 5. 方法 - 静态成员
- 6. 是否有可能在C++中调用静态成员方法内的非静态成员方法?
- 7. C#静态类 - 静态类不能有非静态成员
- 8. 非法引用非静态成员... typedef?
- 9. 访问静态成员静态成员
- 10. 获取静态方法内的非静态方法名称
- 11. 非静态方法说它的静态?
- 12. 非静态的静态方法
- 13. Boost.Bind非静态成员
- 14. 访问非静态成员
- 15. 非静态成员函数
- 16. 想从非静态类访问静态成员的非静态子类的Java
- 17. C++(非内置/类)静态成员
- 18. 无法对非静态类成员进行静态引用
- 19. python类静态方法动态绑定静态数据成员
- 20. 静态/非静态方法问题
- 21. 泛型方法:静态与非静态
- 22. 静态和非静态方法工作
- 23. 静态/非静态方法参考
- 24. powermockito静态和非静态方法链
- 25. 不能使静态方法非静态
- 26. 静态和非静态方法
- 27. 静态与非静态方法2
- 28. 方法参考静态与非静态
- 29. 静态参照非静态方法getBaseContext()
- 30. 静态与非静态方法
您需要了解什么是静态方法。 – SLaks
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html http://introcs.cs.princeton.edu/java/21function/ – SLaks