Создание объектов

Открыта
Создание объектов - 1

— Это снова твоя любимая учительница. Раз у нас так быстро пошли дела, решила рассказать тебе, что такое объекты, и как с ними работать.

— Чтобы создать какой-нибудь объект, нужно написать имя типа (класс) этого объекта и ключевое слово new перед ним. Допустим, у нас есть класс «кот» – Cat, тогда:

Код Описание
Cat cat;
Объявляет ссылочную переменную с именем cat и типом Cat. Значение переменной cat – ссылка null.
new Cat();
Создаёт объект типа Cat.
Cat cat = new Cat();
Создаёт ссылочную переменную cat типа Cat.
Создаёт новый объект типа Cat. Присваивает в переменную cat ссылку на новосозданный объект.
Cat murzik = new Cat();
Cat vaska = new Cat();
Создаются два объекта, ссылки на которые присваиваются двум разным переменным соответственно.
Cat murzik = new Cat();
Cat vaska = new Cat();

vaska = murzik;
Создаются два объекта, ссылки на которые присваиваются двум разным переменным.

Затем, переменной vaska присваивается ссылка на объект, содержащийся в переменной murzik. Теперь обе переменных ссылаются на первый созданный объект.
(На второй больше никто не ссылается – второй объект считается мусором)

Cat murzik = new Cat();
Cat vaska = null;

vaska = murzik;

murzik = null;
Создаётся один объект типа Cat, ссылка на который заносится в первую переменную (murzik), вторая переменная (vaska) содержит пустую (нулевую) ссылку.

Обе переменных ссылаются на один объект.

Теперь только vaska ссылается на объект, но не murzik.

1
Задача
Java Syntax,  2 уровень,  3 лекция
Недоступна
Набираем код Ӏ Java Syntax: 2 уровень, 3 лекция
Внимание! Объявляется набор кода на JavaRush. Включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — вовсе не бесполезное занятие, как может показаться на первый взгляд: благодаря ему новичок привыкает к синтаксису и запоминает его (современные IDE редко дают ему это сделать).

— А что будет, если просто создать объект и не присваивать его [ссылку] никакой переменной?

— Если просто создать объект и не присвоить его никакой переменной, то Java-машина создаст его и тут же объявит его мусором (неиспользуемым объектом). А через некоторое время удалит его в процессе «сборки мусора».

— А как мне уничтожить объект, если он мне больше не нужен?

— Никак. Как только не останется ни одной переменной, хранящей ссылки на данный объект, он будет помечен как мусор и убран: уничтожен Java-машиной при следующей «сборке мусора».

Пока есть хоть одна ссылка на объект, он считается живым и уничтожаться не будет. Если хочешь побыстрее уничтожить объект – обнули все ссылки на него: присвой всем переменным, ссылающимся на него, значение null.

— Понятно. Вроде и не сложно совсем после предыдущих уроков.

— Диего вчера сидел всю ночь и придумывал для тебя интересные задачи. Специально для тебя старался. У него отличное чувство юмора, кстати:

1
Задача
Java Syntax,  2 уровень,  3 лекция
Недоступна
Одного кота нам мало
Как известно, быстро только кошки родятся (если что, это пословица такая, а не домысел). Хотя и объекты создавать тоже можно быстро. Открываем маленькое общество любителей котиков: создадим два объекта типа Cat, и присвоим им имена. Помните, каждый кот — индивидуален, так что имена у них должны быть разные.
1
Задача
Java Syntax,  2 уровень,  3 лекция
Недоступна
Макс, Белла и Джек
Если вы откроете эту задачку, то обнаружите в ней уже созданный класс Dog, то есть «собака». Нам предстоит создать нескольких собак. Мы уже продумали их историю, знаем, как они выглядят и на какие клички откликаются… Но в контексте задачи нас интересует вот что: создайте три объекта типа Dog, а затем присвойте им имена “Max”, “Bella” и “Jack”.
1
Задача
Java Syntax,  2 уровень,  3 лекция
Недоступна
Необъективная реальность
Плохому танцору мешают ноги, а иному программисту мешает язык программирования. Городская легенда, распространённая среди молодых программистов, гласит: «Будешь плохо кодить, придет Java и съест твою память». Предлагаем вам вывести текст этой легенды в консоль. И не забывайте беречь память! Она не бесконечна.
Комментарии (526)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Алексей 2 уровень, Москва
30 июня, 16:11
В лекции такой пример: Cat vaska = new Cat(); Cat murzik = new Cat(); Не понимаю такой момент: вот создаётся два объекта Cat. Но ведь их имена одинаковые, как они могут храниться, как с ними взаимодействовать? Вот, напишу я потом в коде объект Cat(), и какой из них выберется? Разве это не один и тот же объект, ссылка на который передаётся двум разным переменным?
Алексей Хехнев4 уровень, Санкт-Петербург
1 июля, 15:48
Cat - это имя класса, это как "ЧертежСтола" - это тоже имя класса (Имя чертежа в котором имеется описание для конкретного стола). vaska - это имя переменной класса Cat, или имя объекта типа Cat. Это как конкретный стол, уже сделанный. Хранятся эти два объекта в "куче" - в оперативной памяти по ссылке, у каждого объекта она своя. По этому в коде : Cat vaska = new Cat(); Cat murzik = new Cat(); Два объекта vaska и murzik одного класса Cat(Кошка)
Алексей 2 уровень, Москва
позавчера, 02:53
Т.е. созданные объекты имеют имя vaska и murzik, а не Cat? Тогда всё понятно.
honey_ace2 уровень, Москва
вчера, 06:31
верно, тоже до этой лекции не мог понять как они понимают кто есть кто , имея одинаковые имена
Andrew3 уровень, Киев
25 июня, 12:07
В этом курсе какая-то странная подача материала - задачи некоторые нужно решить до изучения теории, в вот тут например последняя задача вообще с нулевого уровня.
Alena35 уровень, Минск
25 июня, 16:09
))) возможность дополнительно "срубить" чёрной материи Принцип подачи описывалась ранее: часть задач - по теме, а часть - на опережение материала. Нашёл способ решить - молодец. Не нашёл - сможешь решить после прохождения соответствующего материала... иногда и дополнительный (сторонний) материал можно почитать...
Mam3 уровень, Екатеринбург
27 июня, 13:16
1, А как же повторение пройденного для новичков и возможность для многих пополнить запас черной материи. 1. Все задачи можно решить на основе ранее пройденных уроков, если проанализировать коды из лекций. Невозможно стать программистом если все время идти по разжеванному
Серега4 уровень, Днепр
21 июня, 20:58
не плохо бы еще видео уроки, пока смотрю тут https://www.youtube.com/playlist?list=PLyApprAtr5yjywFgRkxhfGfesgYoIhU8U
Фёдор4 уровень, Москва
18 июня, 13:38
Не могу никак догнать, зачем нужен тип ссылочной переменной? Почему нельзя просто сделать так cat = new Cat(); ВСЁ!
Роман4 уровень, Москва
18 июня, 19:12
А как ты собираешься что то присваивать переменной которой не существует? Таков путь.
Дмитрий5 уровень, Москва
19 июня, 13:07
Фёдор, смотри описание выше. и Роман прав))
Алексей Макаренко13 уровень, Чебоксары
19 июня, 20:44
Правило обьявления переменной : тип имя = значение; Дальше будут обьяснять наследование,а там если Animal родительский класс Cat, то можно записать : Animal cat = new Cat(); а можно и Cat cat = new Cat();
Максим22 уровень, Екатеринбург
14 июня, 18:10
Было бы супер, если бы просто сделали лекцию про типы памяти (стек, куча) и куда какие данные и почему записываются. С картинками))) Хотя может это есть дальше :D
Максим Лисковец2 уровень, Херсон
12 июня, 12:26
Могу сказать что для более полного понимания материала в курсе придется читать\смотреть доп материалы, некоторые вещи, в угоду "квестовости" описываются не совсем понятно) Но конечно это лично для меня, учу почти с нуля.
5 июня, 14:31
Жаль что нельзя закрепить знания...перепроходить задания...
hidden #23449052 уровень
5 июня, 12:36
vaska ne null!
Ilyan Kolesnikov3 уровень, Туймазы
12 июня, 05:51
viva la vaska!!
Legionerua3 уровень, Киев
2 июня, 13:43
какие разрабы не честные я ламал голову в прошлой лекции а опосля они выбрасывают ету хотя она должна была быть раньше как по мне
dar2 уровень
6 июня, 15:16
Они тебя таким способом учат самому находить решения проблемы.
Mikhail Dischuk4 уровень, Санкт-Петербург
15 июня, 16:44
тоже так подумал)
Bruh4 уровень, железяка
21 мая, 19:04
после просмотра видео-урока (ссылка на который дана ниже) лекция стала намного понятнее : ) спасибо всем, кто поделился.