为什么不能在主方法中使用“this”?

时间:2012-12-04 09:09:45

标签: java

   public class example {

    int a = 0;

    public void m() {
        int b = this.a;
    }

    public static void main(String[] args) {
        int c = this.a;
    }

}

我是java的新手。为什么我不能在main方法中使用“this”?

7 个答案:

答案 0 :(得分:13)

this指的是当前对象。但是,main方法是静态的,这意味着它附加到类,而不是对象实例,因此main()内没有当前对象。

为了使用this,您需要创建类的实例(实际上,在此示例中,您不使用this,因为您有一个单独的对象引用。但您可以使用this方法中的m(),例如,因为m()是一个存在于对象上下文中的实例方法):

public static void main(String[] args){
    example e = new example();
    int c=e.a;
}

顺便说一句:你应该熟悉Java命名约定 - 类名通常以大写字母开头。

答案 1 :(得分:2)

您必须创建示例

的实例
example e = new example()
e.m()

答案 2 :(得分:1)

Becasue main是static。要访问a,您还应将其声明为static。静态变量不存在任何类的实例。仅当存在实例时,才存在非静态变量,并且每个实例都有自己的名为a的属性。

答案 3 :(得分:1)

public class Example {

    int a = 0;

    // This is a non-static method, so it is attached with an instance 
    // of class Example and allows use of "this".
    public void m() {            
        int b = this.a;
    }

    // This is a static method, so it is attached with the class - Example
    // (not instance) and so it does not allow use of "this".
    public static void main(String[] args) {
        int c = this.a; // Cannot use "this" in a static context.
    }
}

答案 4 :(得分:0)

除了Andreas的评论

如果您想使用'a'。然后,您将必须实例化新示例[更好地将示例类名称作为大写Eaxmple]。

这样的东西
public static void main(String[] args) {
  Example e = new Example();
  int c = e.a;
}

HTH

答案 5 :(得分:0)

main方法是静态的,这意味着可以在不实例化example类的情况下调用它(静态方法也可以称为类方法)。这意味着在main的上下文中,变量a可能不存在(因为example不是实例化对象)。同样,如果没有首先实例化m,则无法从main致电example

public class example {

    int a=0;

    public void m(){
       // Do stuff
    }

    public static void main(String[] args){
       example x = new example();
       x.m(); // This works
       m(); // This doesn't work
    }
}

答案 6 :(得分:0)

追加Andreas Fester回答:

z-index