Разве этот объект не должен быть мусором ?
я узнал в Java, что если объект не имеет никакой ссылки на него, он будет автоматически собираться мусором, но почему объект ниже работает нормально и не имеет никакой ссылки на него, разве он не должен быть собран мусором?
public class Main { public static void main(String[] args) { new A().show(); } } class A{ void show(){ System.out.println("Java"); } }
Что я уже пробовал:
я ничего не мог сделать!
Gerry Schmitz
Ваши комментарии не имеют никакого отношения к тому, что вы показываете. Вы показываете яблоко, комментируя вкус апельсинов.
hiwa doski
если сборщик мусора не связан с этим, то я не знаю, что это такое ?
Richard MacCutchan
Посмотри на свой код. Вы создаете новый объект класса A и вызываете его метод Show. Затем вы прекращаете свое заявление. Так откуда же вы знаете, что сборщик мусора никогда не вызывался?
hiwa doski
я думал, что сборщик мусора сразу же запустится и удалит его, но оказалось, что я ошибся.
Richard MacCutchan
Я снова спрашиваю: откуда вы знаете, что это не так?
hiwa doski
потому что метод был выполнен!
Richard MacCutchan
Конечно, он был выполнен, именно это и должен делать вызов метода Show.
hiwa doski
и я подумал, что если он будет собирать мусор, то его не казнят, вот почему я сказал, что он не будет собирать мусор.
Richard MacCutchan
Он не может получить мусор, собранный до тех пор, пока все ссылки не будут удалены. Когда объект создается в main (как временный объект), он имеет ссылку. Затем он вызывает метод Show, который печатает строку. По возвращении из Show в main больше нет кода, поэтому объект выходит из области видимости и вызывается его деструктор. Теперь больше нет никаких ссылок на объект, так что он может быть собран мусором. Но поскольку приложение теперь завершает работу, сборщик мусора не будет нужен.
hiwa doski
Это очень хорошее объяснение, спасибо.