Удаление объекта в java?
Я хочу удалить созданный мной объект (овал, который следует за вами), но как бы я это сделал?
delete follower1;
не работает.
EDIT:
Хорошо, я расскажу о другом контексте. Я делаю небольшую игру с овалом, которым вы можете управлять, и овалом, который следует за вами. Теперь у меня есть файлы с именем: DrawPanel.class, этот класс рисует все на экране и обрабатывает столкновения, звуки и т.д. У меня есть вражеский класс, который является овалом после игрока. У меня есть entity.class, который является игроком, которым вы можете управлять. И если игрок пересекается с последователем, я хочу, чтобы объект моего игрока был удален. Как я это делаю:
public void checkCollisions(){
if(player.getBounds().intersects(follower1.getBounds())){
Follower1Alive = false;
player.health = player.health - 10;
}
}
Ответы
Ответ 1
Вы должны удалить ссылки на него, присвоив значение null или оставив блок, в котором он был объявлен. После этого он будет автоматически удален сборщиком мусора (не сразу, а в конце концов).
Пример 1:
Object a = new Object();
a = null; // after this, if there is no reference to the object,
// it will be deleted by the garbage collector
Пример 2:
if (something) {
Object o = new Object();
} // as you leave the block, the reference is deleted.
// Later on, the garbage collector will delete the object itself.
Не то, что вы в настоящее время ищете, но к вашему сведению: вы можете вызвать сборщик мусора с помощью вызова System.gc()
Ответ 2
Показывается ваш С++.
В java нет delete
, и все объекты создаются в куче. JVM имеет сборщик мусора, который полагается на подсчет ссылок.
Как только больше нет ссылок на объект, он становится доступным для сбора сборщиком мусора.
myObject = null
может не делать этого; например:
Foo myObject = new Foo(); // 1 reference
Foo myOtherObject = myObject; // 2 references
myObject = null; // 1 reference
Все это означает, что ссылка myObject
равна null, она не влияет на объект myObject
, когда указана точка, за исключением того, что просто уменьшает счетчик ссылок на 1. Так как myOtherObject
все еще ссылается на этот объект, это еще не доступны для сбора.
Ответ 3
Если вам нужна помощь, чтобы объект ушел, установите ссылку на нуль.
String x = "sadfasdfasd";
// do stuff
x = null;
Ссылка на значение null делает более вероятным, что объект будет собираться мусором, если нет других ссылок на объект.
Ответ 4
Вам не нужно удалять объекты в java. Когда нет ссылки на объект, он будет собираться сборщиком мусора автоматически.
Ответ 5
Вы можете удалить ссылку, используя null
.
Скажем, у вас есть класс A
:
A a = new A();
a=null;
последний оператор удалит ссылку объекта A
, и этот объект будет "мусором, собранным" JVM.
Это один из самых простых способов сделать это.
Ответ 6
Да, java - собранный мусор, он удалит вам память.
Ответ 7
//Just use a List
//create the list
public final List<Object> myObjects;
//instantiate the list
myObjects = new ArrayList<Object>();
//add objects to the list
Object object = myObject;
myObjects.add(object);
//remove the object calling this method if you have more than 1 objects still works with 1
//object too.
private void removeObject(){
int len = myObjects.size();
for(int i = 0;i<len; i++){
Objects object = myObjects.get(i);
myObjects.remove(object);
}
}