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 ()
- O método finalize () é protegido conforme definido na classe java.lang.Object.
- O método finalize () é chamado apenas uma vez.
- para substituir o método finalize (), você precisa chamar o método finalize explicitamente.
- 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.
- 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
- O destruidor destrói o valor criado pelo construtor para espaço na memória de pilha.
- O destruidor é sempre chamado no final do programa.
- O destruidor nunca está sobrecarregado. O destruidor não aceita nenhum argumento.
- 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.
- O que é a interface Java?
- O que é a interface Java?
- Ferramentas Java
- Layout em Java
- Construtor e Destrutor em Java
- Exemplos de destruidor em Python
- JRE vs JVM | As 8 principais diferenças com (infográficos)
- Destruidor em PHP com exemplos