2014-01-20 5 views
0

Как удалить объект java из его класса. Скажем, у меня есть класс, как:Удалить объект в java из класса

class A 
{ 
    int hp; 
    public void update() 
    { 
     if(hp <= 0) 
     { 
      //here comes the problem. Something like: this.delete(); ?? 
     } 
    } 
} 

и у меня есть экземпляр в моей основной метод, который проверяет, если он должен удалить себя.

EDIT: В моем случае «A» - класс ветряной мельницы в 2D RTS. Он сидит в ArrayList мельницами и имеет следующие методы:

init(called when the game starts to load images) 

update(this is where i want to delete the object) 

draw(for rendering) 
+0

Укажите: «delete»? Укажите какой-либо контекст, * любой * контекст. –

+0

sth как освободить память? – user2466076

+0

Что вы хотите «удалить», чтобы сделать JVM для вас? –

ответ

1

Вы пытаетесь «освободить память» объекта, и, к сожалению, нет один размер подходит для всех решения. Вы должны удалить все активные ссылки на объект. Опять же все это зависит от контекста, от каких переменных относится ваш объект интереса. Сделайте это, и GC освободит ссылку, когда она решит, что GC'ing нужно сделать, то, что мы не контролируем, но можем только вносить предложения в GC.


Вы заявляете в комментарии:

позволяет сказать, что А является sodier и если он будет убит, я палочку, чтобы удалить его

Затем удалите его из списка солдат службы, возможно, базы данных или ArrayList.


Лучше объявлять переменные как ограничивало сферу, как это возможно, чтобы они, естественно, будут освобождены от всех ссылок, когда они больше не нужны, и свой код, так что вы можете увидеть, когда он работает в неприятности.


Вы заявляете в комментарии:

да объект в ArrayList, который, к счастью, является общедоступной и статическими, так что проблема решена. thans для вашего широкого объяснения

Нет, это неверно. ArrayList не должен быть статичным или общедоступным, а должен быть частным экземпляром. Создание поля static означает, что его нельзя использовать объектно-ориентированным способом. Публикация означает, что любой объект может в любой момент мутировать его, и в сложных программах это может привести к сложному отслеживанию проблем и увеличению цикличности сложности. Он должен изменяться только контролируемым образом с помощью общедоступных методов класса, который его поддерживает. Извините, но ваш дизайн программы звучит ошибочно, предполагая, что вам захочется просмотреть, реорганизовать, улучшить его. Как это сложно сказать на основе фрагментов информации.

+0

Я не думал об этом, спасибо! – user2466076

+0

Терминология пожалуйста. * Null * все ссылки ... и GC освободят объект *. – EJP

+1

@ user2466076 даже одна доступная, сильная ссылка сохранит объект в живых, поскольку он все еще может понадобиться. –

1

В Java вы не можете явно удалить объект из памяти. Самое приятное в том, что это обрабатывается тем, что мы называем «Сборщиком мусора». Когда это выполняется, он обходит поиск объектов без ссылок на них и удаляет их. Таким образом, единственное, что вы можете сделать, это удалить все ссылки на объект (позволить им выйти из области действия, установить их на нуль, что угодно), а затем дождаться запуска GC.

Невозможно заставить GC работать, однако вы можете технически «поощрять» его к запуску с помощью метода System.gc(). Это не означает, что он будет работать, но не нужен ни в чем, кроме случаев с краями.

0

Даже если C++, вы должны очистить указатели/ссылки на объект, прежде чем сможете безопасно освободить его память. В Java это все, что вам нужно сделать, и все остальное.

обновление (это где я хочу, чтобы удалить объект)

Это означает, что вы хотите, чтобы удалить его из ArrayList. Вы можете

  • сделать это немедленно, но это требует ссылку на список (ы) объект находится.
  • или удалить мертвые записи на открытии, например, при повторении списка.
Смежные вопросы