Destruir/desfazer-se de objeto em JAVA

Boa noite galera do Guj, sou novo aqui e não tão experiente em Java.

Tenho um programa, que na realidade é um jogo, onde a Classe “Jogador”, possui um objeto “Pet”, que é indefinido até o momento em que o Jogador compra um animal.
Quando ele vai comprar o animal, o programa seta tudo através da criação do objeto, ou seja, ele faz isso:

Pet pe1 = new Pet(this.j); //Uma classe contendo o objeto j(Jogador) cria e seta o P1 de 'j’
this.j.setP1(pe1);

Até aqui tudo certo, criou-se o objeto e setou ele ao P1 de j(Jogador), mas e quando de repente eu quiser me desfazer desse objeto Pet, e comprar outro objeto Pet? Como eu limitei a compra a no máximo 2, as únicas formas que vejo seriam as de destruir de alguma forma a objeto Pet, para que quando fosse comprado outro objeto Pet ele fosse posto no lugar do já não existente, ou de uma maneira manual, criar algum método “zeraTudo()”, por exemplo, onde eu apenas setasse todos os valores a 0, e simulasse uma inexistência que não seria real, pois o objeto continuaria ali.

Como deveria ser feito esse processo de “exclusão” do objeto?

À galera que puder me responder, sou grato pela atenção.

Olá,
seta nulo:
this.j.setP1(null);
Desta maneira não existe mais Pet em P1. Destruir o objeto não é exatamente possível, com este código P1 perde a referência ao objeto e o objeto será automaticamente destruído em algum momento pelo garbage collector quando nenhuma variável estiver o referenciando.

Olá DarkCF, o Java não possui nenhum tipo de método ou classe utilitária para destruir o objeto. O Java trabalha com referências, no caso o caractere de = (igual) que colocamos, por exemplo, this.pet = pet, o que nada mais é o que os métodos sets fazem, desta forma, a única maneira de um objeto não existir mais é que o mesmo não possua nenhuma referência, seja = null, como o @Rodrigo_Void mencionou.
Então se eu crio um objeto, é alocado um espaço na memória para o mesmo, e ele continuará “vivo” enquanto existe alguma referência, mas caso deixa de existe a referência, sendo = a null, o garbage collector irá executar, identificar que o mesmo não possui nenhuma referência e limpar da memória, desta forma seu objeto deixará de existir.
Caso queira saber mais a respeito do Garbage Collector (GC), você pode dar uma lida nesta parte da apostila da Caelum de Java Orientado a Objetos ou no próprio site da Oracle.

Cuidado com afirmações como esta.

String nome = "Astolpho";

Neste cenário, se você fizer o que disse

nome = null;

Estará destruindo a referência do objeto referente à variável nome e não o objeto “Astolpho”.

O que faz com que um objeto deixe de existir é a execução do garbage collector e um objeto só se torna elegível a ser recolhido pelo GC quando não é referenciado por nenhuma thread, este é o termo adequado.
Deste modo, se você tiver isso

String nome = "Astolpho";
nome = "Joaquim";

Aqui o objeto “Astolpho” deixa de ser referenciado em uma thread, tornando-se elegível ao garbage collector, mesmo sem o atributo nome ter sido definido como nulo.

2 curtidas

Obrigado ao pessoal que respondeu. Não só fizeram com que meu programa funcionasse, como me elucidaram em alguns pontos. Valeu pela força!