2014-02-03 4 views
0

Я следующий кодJava: Проблема с классами

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?

ответ

10

Переменная a - static, поэтому существует только один a для всех экземпляров Demo. Он начинается с 0, а инициализатор static устанавливает его на ++b или 2. Затем d1.a++ увеличивает его до 3, но d2.a-- уменьшает a назад до 2.

0

d1.a - поле статического члена, поэтому к нему следует обращаться не через экземпляр. Он должен получить доступ через: Demo.a.

И, кстати, d1.a и d2.a относятся к одному статическому полю члена, так что приращение a в d1.a++ является «рулетом спинок» с декрементом: d2.a--.

Смежные вопросы