Introdução ao Destructor em Java

Destrutores em Java podem ser aprendidos com o método finalize em Java. O conceito é o mesmo que o método finalize. Java funciona para todos, exceto o destruidor, com a ajuda da coleta de lixo. Portanto, caso seja necessário chamar o destruidor, isso pode ser feito com a ajuda do método finalize. Esse método não é independente, pois depende da coleta de lixo. O coletor de lixo é um encadeamento que exclui ou destruiu o objeto não utilizado na área de heap. Diga se o objeto está conectado a um arquivo ou diga algum aplicativo de banco de dados ou conexões de rede, antes de excluir ou destruir o objeto, ele deve fechar todas as conexões relacionadas a esses recursos antes que a coleta de lixo ocorra. Esse fechamento das funções é feito chamando o método finalize.

Definição de Destructor em Java

“Destructor é um método chamado quando a destruição de um objeto ocorre. “O principal objetivo do destruidor é liberar a memória alocada e também limpar recursos como o fechamento de arquivos abertos, o fechamento de conexões com o banco de dados, o fechamento de recursos de rede, etc.,

Sintaxe

Class Object
(
protected void finalize()
(
//statements like closure of database connection
)
)

Como o Destructor trabalha em Java?

O destruidor possui um método finalize () em java, que é semelhante ao destruidor em C ++. Quando os objetos são criados, eles são armazenados na memória heap. Estes são acessíveis por threads principais ou filho. Portanto, quando esses objetos não são mais usados ​​pelo encadeamento principal ou seus encadeamentos filhos, eles se tornam elegíveis para a coleta de lixo e a memória adquirida agora fica disponível quando novos objetos são criados. Antes de um objeto ser um lixo coletado pelo coletor de lixo, o JRE (Java Runtime Environment) chama o método finalize () para fechar os fluxos de entrada e saída, as conexões com o banco de dados, as conexões de rede, etc. Observe que o método finalize chamado está protegido. Por que finalizar é protegido porque pode ser chamado pela classe base ou classe derivada? O método finalize está presente na classe Object. Portanto, caso você queira chamar esse método finalize de outros objetos, você pode alterar isso protegido para público.

Sintaxe:

protected void finalize throws Throwable()
(
//Keep some resource closing operations here
)

Métodos de finalize ()

  1. O método finalize () é protegido conforme definido na classe java.lang.Object.
  2. O método finalize () é chamado apenas uma vez.
  3. para substituir o método finalize (), você precisa chamar o método finalize explicitamente.
  4. GC () é um serviço da JVM para executar a Coleta de Lixo, é chamado quando a memória heap está cheia e precisa de memória para novos objetos que chegam.
  5. A JVM ignora todas as exceções, exceto as exceções não verificadas que ocorrem no método finalize.

Exemplo 1

No programa abaixo, a classe String correspondente finaliza o método é chamada em vez do método finalize presente no programa. O método finalize é substituído aqui.

Código:

public class Demo
(
public static void main(String() args)
(
Integer i = new Integer(2);
i = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("object is garbage collected ");
)
)

Resultado:

Exemplo 2

No programa abaixo, o método finalize é chamado internamente, sem necessidade de chamada explícita.

Código

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("object is garbage collected ");
)
)

Resultado:

Exemplo 3

No programa abaixo, a finalização foi chamada internamente, dependendo do número de objetos criados.

Código

public class NewProgram(
public void finalize()(
System.out.println("object is garbage collected");
)
public static void main(String args())(
NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram
NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram
np1=null;
np2=null;
System.gc();
System.out.println("In the Main Method");
)
)

Resultado:

Exemplo 4

No programa abaixo, dois objetos são criados, a finalização é chamada uma vez, pois os dois estão apontando para o mesmo.

Código:

public class NewProgram(
public void finalize()(
System.out.println("garbage collected");
)
public static void main(String args())(
NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram
NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram
np1 = np2; // both now pointing to same object
System.gc();
System.out.println("in the Main Method");
)
)

Resultado:

Exemplo 5

No programa abaixo, o método finalize será chamado duas vezes explicitamente e internamente.

Código

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm.finalize();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("garbage collected ");
)
)

Resultado:

Exemplo 6

No programa abaixo, há uma exceção aritmética chamada no método finalize, como explicitamente chamada, que causa a exceção e interrompe a execução do programa restante.

Código:

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm.finalize();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("garbage collected ");
System.out.println(10 / 0);
)
)

Resultado:

Exemplo 7

No programa abaixo, não há exceção chamada, pois não é chamada explicitamente e continua a execução do programa restante.

Código:

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("garbage collected ");
System.out.println(10 / 0);
)
)

Resultado:

Vantagens do Destructor em Java

  1. O destruidor destrói o valor criado pelo construtor para espaço na memória de pilha.
  2. O destruidor é sempre chamado no final do programa.
  3. O destruidor nunca está sobrecarregado. O destruidor não aceita nenhum argumento.
  4. Não há necessidade de definir nosso construtor, o compilador cria para nós um.

Conclusão

Espero que este artigo seja interessante e informativo para você aprender o tópico. Este artigo abordou quase todos os tópicos que você está procurando e a esperança cumpre todos os seus requisitos.

Artigos recomendados

Este foi um guia para o Destructor em Java. Aqui discutimos a definição de destruidor em Java, como o destruidor funciona em java com métodos, vantagens e exemplos diferentes. Você também pode ler nosso outro artigo sugerido para saber mais.

  1. O que é a interface Java?
  2. O que é a interface Java?
  3. Ferramentas Java
  4. Layout em Java
  5. Construtor e Destrutor em Java
  6. Exemplos de destruidor em Python
  7. JRE vs JVM | As 8 principais diferenças com (infográficos)
  8. Destruidor em PHP com exemplos