undefined

Видимость объектов и ссылка null.

Java Syntax
6 уровень , 1 лекция
Доступна

— Привет, Амиго!

— Привет, Элли! Что интересного расскажешь сегодня?

— Сегодня я расскажу тебе про время жизни объекта. Каждый объект после создания существует (живёт) пока хотя бы одна переменная хранит его адрес (на него есть хотя бы одна ссылка). Если ссылок больше не остаётся – объект умирает. Примеры:

public class MainClass
{
   public static void main (String[] args)
   {
    Tommy
     Cat cat = new Cat("Tommy");
     cat = null;
    
    Sammy
     Cat cat1 = new Cat("Sammy");
    Maisy
    Cat cat2 = new Cat("Maisy");
    cat2 = cat1;
    
    Ginger
    cat1 = new Cat("Ginger");
     cat2 = null;
    
    
   }
}

— Объект «кот Томми» существует всего одну строчку с момента создания. Уже на следующей строке единственную переменную, которая хранит на него ссылку, «обнуляют» и объект уничтожается Java-машиной.

— Объект «кот Семми» после создания хранится в переменной cat1. Или, если быть точным, там хранится ссылка на него. Парой строчек ниже эта ссылка копируется в cat2. После этого в cat1 сохраняется ссылка на другой объект, и ссылка на «кот Семми» остаётся только в cat2. Наконец, в последней строке метода main, последнюю ссылку на объект обнуляют.

— Объект «кот Мейси» существует сразу после создания всего одну строчку. На следующей строке переменной cat2 присваивают другое значение, и ссылка на «кот Мейси» теряется. Объект становится недостижимым и считается мусором (объект умер).

— Объект «кот Джинджер» существует сразу после создания и до конца метода. Вместе с окончанием метода будет уничтожена переменная cat1, и следом за ней и объект «кот Джинджер».

— Ясно.

— Но если создать объект Cat в каком-нибудь методе и сохранить ссылку на него в переменную класса, то объект Cat будет существовать все время, пока существует ссылка на него из другого живого объекта.

— Обычно объект уничтожается не сразу. Java-машина время от времени запускает уборку мусора – уничтожение неиспользуемых объектов. Об этом ниже.

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

Комментарии (146)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Nick Уровень 20
10 апреля 2021
Опасная статья однако - может грозить автору за эту статью за жестокое обращение с котиками. 😾
Владоs Уровень 8 Луганск Украина
3 марта 2021
ясно ему
Lena Уровень 24 Киев Украина
4 января 2021
На картинке нарисовано немного не так время жизни Sammy и Ginger. В конце Sammy находится только в cat2, и cat2 присвают null После этого Sammy должен пометится как объект для удаления В это время Ginger еще не помечен как "мусор" и теоретически есть вероятность что сборщик мусора соберет Sammy перед Ginger. В картинке же нарисовано так, как будто Sammy уничтожится точно не раньше Ginger
Сергей Уровень 22
29 декабря 2020
" Обычно объект уничтожается не сразу. Java-машина время от времени запускает уборку мусора – уничтожение неиспользуемых объектов. " - Вопрос к знатокам! А как вызвать Java-машину принудительно, что бы не ждать, когда она сама заработает?
Oleg Уровень 7 Москва Россия
27 декабря 2020
Да, автор лекции - кудесник, рассказывающий простые вещи наиболее сложным способом
Станислав Уровень 19 Мариуполь Украина
22 декабря 2020
Первым погиб Томми. Совсем желторотый юнец, он даже не успел приступить к своим обязанностям, прежде чем покинул нас. Не успели мы моргнуть, как потеряли еще одного бойца, её звали Мэйси... красивое имя...и она была красива, пока машина не оставила от нее и следа. Мой напарник Сэм немедля занял её место. Мне же не осталось ничего другого, как занять место Сэмми. Мы храбро держались. Даже не знаю допустил ли Сэм какую-то ошибку, возможно он и сам не успел понять, обнуление произошло за доли секунды. Кроме меня никого не осталось. Не знаю сколько еще смогу продержаться, но это в любом случае бессмысленно, конец метода совсем близок. Мое имя сержант Джинджер... *конец записи*
ilya Уровень 13 Самара Россия
7 декабря 2020
с первом обьектом Tommy, все вроде более менее ясно,создается переменная cat которая хранит ссылку на обьект Tommy,потом этой переменной присваивают значение null (пустая ссылка),и обьект типа перестает существовать и уничтожается,c другими котами все сложнее
hidden #2448783 Уровень 19
7 декабря 2020
тема простейшая но JavaRush как всегда поставит на колени.
SolomonVP Уровень 31 Томск-Москва-Краснодар Россия
23 сентября 2020
Dog’и расслабились
🦔 Виктор Уровень 20 Москва Россия Expert
17 сентября 2020
Всё хорошо, но котиков жалко : (