为什么我不能间接地从非静态方法访问非静态变量?

时间:2017-03-02 22:26:51

标签: java static

class C {
    static int b = 1;

    void f1() {
        System.out.println(C.b); // Access static variable indirectly
    }
}

class A {
    public static void main(String a[]) {
        C as = new C();
        as.f1();
    }
}
class C {
    int a = 0;

    void f1() {
        System.out.println(C.a); // Access non static variable indirectly
    }
}

class A {
    public static void main(String a[]) {
        C as = new C();
        as.f1();
    }
}

第二个程序在我们编写System.out.println(**a**)时有效,但为什么在我们编写System.out.println(**C.a**)时失败而不是在编写System.out.println(**C.b**)时有效的第一个程序?

1 个答案:

答案 0 :(得分:0)

在Java中,我们必须在类中键入membens:static和instance。

定义

  • 只能在实例方法中调用实例成员,如下所示: this.a a C.this.a 。实例成员属于内存中的对象实例
  • 可以在实例和静态方法中调用静态成员,因为它们属于内存中的。如果它们属于该类,则它们在内存中的所有实例之间共享。

为什么你不能打电话给System.out.println(C.a);

  1. a是一个实例变量,因此必须仅在实例中调用
  2. Java将解释C.a在类的静态区域中调用变量a,而不是实例1