2013-09-29 64 views
-3

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

+8

您需要了解什么是静态方法。 – SLaks

+0

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html http://introcs.cs.princeton.edu/java/21function/ – SLaks

回答

1

非静态类成员和this与类的实例关联,而静态方法不与任何实例关联,但与类本身关联。

0

因为非静态成员和this关键字都指对象的实例。静态方法属于类,而不是实例,所以这两件事在上下文中并不意味着什么。

1

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

至于thisthis引用属于该对象的非静态变量。由于您无法从静态方法访问非静态变量,因此您不应使用静态方法调用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知道关于类的一切,所以对象可以访问所有的静态方法类。
classno有关其objects的信息,这就是为什么静态方法无法访问对象的成员。