CodeGym /Java курс /Синтаксис на Java /Видимост на обекта и нулеви препратки

Видимост на обекта и нулеви препратки

Синтаксис на Java
Ниво , Урок
На разположение

„Здрасти, Амиго!“

"Здравей, Ели. Имаш ли да ми кажеш нещо интересно?"

„Днес ще говорим за това колко дълго един обект остава в паметта, известен също като живот на обекта. След като обектът е създаден, той съществува (живее), докато поне една променлива съхранява своя address (има поне една препратка към него). Ако няма повече препратки, обектът умира. Ето няколко примера:"

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

„Обектът Tommy съществува само за един ред от създаването му. Единствената променлива, която препраща към обекта, е настроена на нула в следващия ред, така че обектът се унищожава от Java Virtual Machine (JVM).“

„Обектът Sammy се съхранява в променливата cat1 , след като е създаден. Или, по-точно, променливата съхранява препратка към него. Няколко реда по-късно тази препратка се копира в cat2 . След това препратка към друг обект се записва в cat1 . Сега само cat2 препраща към Sammy . И накрая, последната останала препратка към обекта е зададена на null в последния ред на главния метод."

„Обектът Missy съществува само за един ред след създаването му. В следващия ред променливата cat2 е зададена на друга стойност и препратката към Missy се губи. Обектът вече не може да бъде достъпен, така че се счита за боклук от система (т.е. обектът е мъртъв)."

„Веднъж създаден, обектът Ginger съществува до края на метода. В края на метода променливата cat2 се унищожава, като Ginger се унищожава веднага след това.“

"Виждам."

„Но ако създадем обект Cat вътре в метод и съхраним препратка към него в променлива на екземпляр, тогава обектът Cat ще съществува, докато към него се препраща друг обект, който все още е жив.“

„Всъщност даден обект обикновено не се унищожава незабавно от системата. Виртуалната машина на Java извършва „събиране на боклук“ от време на време, унищожавайки обекти, които са бor маркирани за изтриване. Повече за този процес по-късно.“

„И ако вече не искаме дадена променлива да препраща към обект, можем да я зададем на null or да й присвоим препратка към друг обект.“

Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION