Java:类问题

时间:2014-02-03 19:10:03

标签: java static-members

我有以下代码

class Demo {
    static int a = 0;
    static int b = 1;
    static {
        a = ++b;
    }

    void gam(int x) {
        a = a * x;
        b = b * x;
    }
}

class Test {
    public static void main(String[] args) {
        Demo d1 = new Demo();
        Demo d2 = new Demo();
        d1.a++;
        d2.a--;
        System.out.println(d1.a + " " + d1.b + " " + d2.a + " " + d2.b);
    }
}

但是我无法弄清楚为什么d1.a是2.不应该是3吗?由于a=++b使其为2而d1.a++使其为3?

2 个答案:

答案 0 :(得分:10)

变量astatic,因此a的所有实例只有一个Demo。它从0开始,static初始值设定项将其设置为++b2。然后,d1.a++将其增加到3,但d2.a--相同的 a减少到2

答案 1 :(得分:0)

d1.a是一个静态成员字段,因此不应通过实例访问它。它应该通过以下方式访问:Demo.a

顺便说一句,d1.ad2.a引用相同的静态成员字段,因此ad1.a++的增量是“滚动支持”的减量:d2.a--