Объявление класса
class Cat //класс
{
String name; //обычная переменная
static int catCount; //статическая переменная
Cat(String name)
{
this.name = name;
Cat.catCount++; //увеличиваем значение статический переменной на 1
}
}
Код в методе main:
System.out.println(Cat.catCount);
Cat cat1 = new Cat("Vaska");
System.out.println(Cat.catCount);
Cat cat2 = new Cat("Murka");
System.out.println(cat1.name);
System.out.println(cat2.name);
System.out.println(Cat.catCount);
Вывод на экран будет таким:
0
1
Vaska
Murka
2
Лучше побыть дураком пять минут... Вопрос о втором примере сверху (где добавили счетчик) "catCount++".
Т. е. счетчик увеличивает значение при обращении (путем вызова переменной cat1(или cat2) на которую ссылается объект) к объекту класса "Cat" и его имени "name" (так как эта переменная не статическая и имеется у любого созданного объекта по умолчанию).
Остедова вопрос: Отчего Вывод на экран в пятой строчке принимает значение "2", а не "4", ведь обращение к двум объектам происходит по два раза - значит при каждом обращении должно увеличиваться значение статической переменной "catCount++"? Помогите разобраться в каком месте умовыводов я ошибся, почему. Объясните пожалуйста !
Ввел в программе - все правильно, как в примере, а не как я думаю. Правильным ли тогда стоит считать вывод, что при обращении к имени объекта (System.out.println(cat1.name);) счетчик не срабатывает? Но почему, имя же не оторвано от объекта ? Или счетчик срабатывает ТОЛЬКО при создании объекта ? Запутался. Распутайте где правильно, а где нужно вычеркнуть и забыть!
Андрей
20 уровень
Вопрос по лекции 6 уровень 6 (https://javarush.ru/quests/lectures/questsyntax.level06.lecture06)
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
ГоффMaster
28 ноября 2019, 14:04решение
Т. е. счетчик увеличивает значение при обращении (путем вызова переменной cat1(или cat2) на которую ссылается объект) к объекту класса "Cat" и его имени "name" (так как эта переменная не статическая и имеется у любого созданного объекта по умолчанию).
Нет. catCount объявлена как статическая переменная, она одна для всех объектов класса. К ней можно обратиться, используя имя объекта (cat1.catCount), но правильно будет Cat.catCount, используя имя класса, которому она приндлежит.
Счётчик этот увеличивает значение при выполнении конструктора. А конструктор выполняется при создании объекта. При обращениии к объекту конструктор не выполняется. То-есть при выполнении команды Cat cat1 = new Cat("Vaska"); создаётся новый объект и при этом catCount увеличивается на 1. При обращении к объекту cat1.name конструктор не выполняется, переменная не изменяется. Так как мы создали два объекта, то и её значение - 2.
+2
Андрей
28 ноября 2019, 14:08
Как по книжке! Благодарю !
0
ГоффMaster
28 ноября 2019, 14:13
Велкам)
0