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

Открыта
Создание объектов - 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.

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

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

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

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

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

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

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

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

2
Задача
Java Syntax,  2 уровень,  3 лекция
Недоступна
Одного кота нам мало
Как известно, быстро только кошки родятся (если что, это пословица такая, а не домысел). Хотя и объекты создавать тоже можно быстро. Открываем маленькое общество любителей котиков: создадим два объекта типа Cat, и присвоим им имена. Помните, каждый кот — индивидуален, так что имена у них должны быть разные.
2
Задача
Java Syntax,  2 уровень,  3 лекция
Недоступна
Макс, Белла и Джек
Если вы откроете эту задачку, то обнаружите в ней уже созданный класс Dog, то есть «собака». Нам предстоит создать нескольких собак. Мы уже продумали их историю, знаем, как они выглядят и на какие клички откликаются… Но в контексте задачи нас интересует вот что: создайте три объекта типа Dog, а затем присвойте им имена “Max”, “Bella” и “Jack”.
2
Задача
Java Syntax,  2 уровень,  3 лекция
Недоступна
Необъективная реальность
Плохому танцору мешают ноги, а иному программисту мешает язык программирования. Городская легенда, распространённая среди молодых программистов, гласит: «Будешь плохо кодить, придет Java и съест твою память». Предлагаем вам вывести текст этой легенды в консоль. И не забывайте беречь память! Она не бесконечна.
Комментарии (326)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
8 июля, 19:23
Вроде и все делаю (бывает вообще легко), но вообще не до конца понимаю как это делаю, и почему.
Ильнур4 уровень, Казань
7 июля, 22:09
представим что мы боги и мы решили создать собаку , с начала мы создали объект : Dog Max = new Dog; и предположительно как-то ее назвали "Max" , вот ее нашел человек и решил ее как-то назвать , но так как мы боги мы все решили за человека и заставили человека подумать что "Max" хорошее имя, человек тоже назовет ее "Max" теперь что бы присвоить имя к собаке имя (что бы она отзывалась , когда зовет человек ) мы должны написать волшебную строку Max.name = "Max"; заметь тут ты обращаешься к public static class Dog { public String name; }
Алексей3 уровень
7 июля, 19:41
— А что будет, если просто создать объект и не присваивать его [ссылку] никакой переменной? — Если просто создать объект и не присвоить его никакой переменной, то Java-машина создаст его и тут же объявит его мусором (неиспользуемым объектом). А через некоторое время удалит его в процессе «сборки мусора». А как вообще такое возможно? Ведь просто так не напишешь: new Cat()???
sanatroy3 уровень
8 июля, 14:44
если ты не воишь ему переменную через какоето время Джава сочтет етот обьект мусором и перекиен его в мусор и потом уничтожит
Николай3 уровень, Симферополь
30 июня, 10:43
Задание Dog, пример написания кода в самом задании уже написан, все логично и просто, со временем задания проходить проще станет, когда больше материала изучишь, параллельно изучать книгу "Изучаем JAVA" очень помогает в заданиях и обучении.
Intern8 уровень, Riga
29 июня, 08:47
Cat murzik = new Cat(); Cat vaska = null; vaska = murzik; murzik = null; vaska = murzik;<--- это значит что оба объекта ссылаются на new Cat() ? а если бы было murzik = vaska ? значит оба ссылались бы на null? я не понимаю присвоение, оно происходит слева направо или наоборот?
Viktor Gromov7 уровень
4 июля, 15:07
Все верно. Смотрите на простом примере, что вы делали еще на первом уровне: int a; a = 5; Вы переменной a присваиваете значение 5, а не пятерке - значение a. Аналогично и тут.
Bulbamama3 уровень, Москва
25 июня, 11:27
Напиши программу, которая выводит на экран надпись: "Будешь плохо кодить, придет Java и съест твою память". Вы серьезно ?
Николай4 уровень
25 июня, 18:14
А вдруг Вы забыли первые уроки )
Саня3 уровень, Москва
11 июня, 15:53
Задача "Необъективная реальность" слишком лёгкая для такого уровня)
Intern8 уровень, Riga
29 мая, 20:44
Cat cat = new Cat(); тут первый Cat это тип, cat переменая и new Cat() это создание нового типа? так? а если у нас Cat cat = new Animal(); ?
Имамдин Шарабдинов7 уровень, Владикавказ
1 июня, 16:25
Cat - это переменная-ссылка на новый обьект(new Cat();) с именем cat Обьект с именем Cat() вроде задана в отдельном классе public static class Cat
Ivan19 уровень
3 июня, 08:10
new Cat() это создание нового объекта, а не типа. Объект создаётся на основе класса public static class Cat. new Animal() невозможно создать, потому что нет класса public static class Animal.
Intern8 уровень, Riga
29 мая, 20:34
если Cat cat = нуль, то Cat cat = new Cat() это объект который равен 0?1?
Имамдин Шарабдинов7 уровень, Владикавказ
1 июня, 16:29
Cat cat; если задана так, то null, но в нашем случае сразу присвоен объект Cat()
Kay Kokh1 уровень
25 мая, 13:53
Что такое "Cat"?
ununnamed31 уровень, Киев
26 мая, 16:23
переменная типа String
AkaRisu5 уровень, Киев
2 июня, 02:12
А разве Cat не объект здесь? Или тип объекта?