Я продолжаю получать 0 для обоих счетчиков до и после создания x количества объектов.

class Thing {
    private static int count = 0;
    
    public Thing() {
        count++;
    }
    
    public static int getCount(){
        return count;
    }
}

public class getCounter {
    public static void main(String[] args) {
        int counter = Thing.getCount();
        
        System.out.println("Objects created: " + counter);

        Thing thing1 = new Thing();
        Thing thing2 = new Thing();
        
        System.out.println("Objects created: " + counter);
    }
}
0
Enzo Bolivar 28 Июл 2020 в 18:31

2 ответа

Лучший ответ

Вам нужно позвонить getCount() еще раз, чтобы получить обновленный счет. Если вы кешируете его в переменной, у вас всегда будет одно и то же значение.

public static void main(String[] args) {
    System.out.println("Objects created: " + Thing.getCount());

    Thing thing1 = new Thing();
    Thing thing2 = new Thing();
    
    System.out.println("Objects created: " + Thing.getCount());
}
4
John Kugelman 28 Июл 2020 в 15:34

Просто добавьте правильный ответ Джона и объясните - почему его ответ правильный:

Назначение значения переменной - это сохранение этого значения в этой переменной в определенный момент выполнения.

Например:

int x = Math.sqrt(25);

Средства для сохранения значения, возвращаемого Math.sqrt(25) (который равен 5), в переменную x.

Вы сохраняете значение, возвращенное из getCount(), в локальной переменной counter, но никогда не обновляете его, не обращая внимания на то, сколько объектов вы создадите, если переменная counter останется такой, как есть, оно всегда будет иметь одинаковое значение 0.

После того, как ваш конструктор обновит член класса counter дважды, вы можете снова вызвать getCount(), чтобы получить актуальное значение.

0
Giorgi Tsiklauri 28 Июл 2020 в 15:51