Introducción a Destructor en Java

Los destructores en Java se pueden aprender con el método de finalización en Java. El concepto es el mismo que el método de finalización. Java funciona para todos excepto el destructor con la ayuda de la recolección de basura. Por lo tanto, en caso de que sea necesario llamar al destructor, se puede hacer con la ayuda del método de finalización. Este método no es independiente, ya que se basa en la recogida de basura. El recolector de basura es un subproceso que elimina o destruye el objeto no utilizado en el área del montón. Diga si el objeto está conectado a un archivo o diga alguna aplicación de base de datos o conexiones de red, antes de eliminar o destruir el objeto, tiene que cerrar todas las conexiones relacionadas con estos recursos antes de que tenga lugar la recolección de basura. Este cierre de las funciones se realiza llamando al método finalize.

Definición de Destructor en Java

“Destructor es un método llamado cuando tiene lugar la destrucción de un objeto. “El objetivo principal del destructor es liberar la memoria asignada y también limpiar recursos como el cierre de archivos abiertos, el cierre de conexiones de bases de datos, el cierre de recursos de red, etc.

Sintaxis

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

¿Cómo funciona Destructor en Java?

El destructor tiene un método finalize () en java que es similar al destructor en C ++. Cuando se crean los objetos, se almacenan en la memoria de almacenamiento dinámico. Estos son accesibles por hilos principales o secundarios. Entonces, cuando el subproceso principal o sus subprocesos secundarios ya no usan estos objetos, se vuelven elegibles para la recolección de basura y la memoria que se adquirió ahora está disponible por los nuevos objetos que se crean. Antes de que un objeto sea una basura recolectada por el recolector de basura, el JRE (Java Runtime Environment) llama al método finalize () para cerrar los flujos de entrada-salida, las conexiones de la base de datos, las conexiones de red, etc. Tenga en cuenta que el método finalize llamado está protegido. ¿Por qué finalizar está protegido porque puede ser llamado por la clase base o la clase derivada? El método finalize está presente en la clase Object. Por lo tanto, en caso de que desee llamar a este método de finalización desde otros objetos, puede cambiar esto protegido a público.

Sintaxis:

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

Métodos de finalización ()

  1. El método finalize () está protegido como se define en la clase java.lang.Object.
  2. El método finalize () se llama solo una vez.
  3. para anular el método finalize (), debe llamar al método finalize explícitamente.
  4. GC () es un servicio de JVM para ejecutar Garbage Collection, se llama cuando la memoria de almacenamiento dinámico está llena y necesita memoria para los nuevos objetos que llegan.
  5. JVM ignora todas las excepciones, excepto las excepciones no marcadas que se producen en el método de finalización.

Ejemplo 1

En el siguiente programa, se llama al método de finalización correspondiente de la clase String en lugar del método de finalización presente en el programa. El método de finalización se reemplaza aquí.

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 ");
)
)

Salida:

Ejemplo # 2

En el siguiente programa, el método de finalización se llama internamente, no se requiere una llamada 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 ");
)
)

Salida:

Ejemplo # 3

En el siguiente programa, la finalización se llamó internamente dependiendo de la cantidad de objetos creados.

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");
)
)

Salida:

Ejemplo # 4

En el siguiente programa, se crean dos objetos, se llama a finalizar una vez ya que ambos objetos apuntan al mismo.

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");
)
)

Salida:

Ejemplo # 5

En el siguiente programa, el método de finalización se llamará dos veces explícita e internamente ambos.

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 ");
)
)

Salida:

Ejemplo # 6

En el siguiente programa, hay una excepción aritmética llamada en el método finalize, ya que se llama explícitamente, lo que provoca la excepción y detiene la ejecución del 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);
)
)

Salida:

Ejemplo # 7

En el siguiente programa, no se llama ninguna excepción, ya que no se llama explícitamente y continúa la ejecución del 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);
)
)

Salida:

Ventajas de Destructor en Java

  1. El destructor destruye el valor creado por el constructor al espacio en la memoria de almacenamiento dinámico.
  2. Destructor siempre se llama al final del programa.
  3. El destructor nunca se sobrecarga El destructor no acepta ningún argumento.
  4. No es necesario definir nuestro constructor, el compilador nos crea uno.

Conclusión

Espero que este artículo sea interesante e informativo para que pueda aprender el tema. Este artículo dado ha cubierto casi todos los temas que está buscando y esperamos que cumpla con todos sus requisitos.

Artículos recomendados

Esta ha sido una guía para Destructor en Java. Aquí hemos discutido la Definición de Destructor en Java, Cómo funciona el destructor en Java con Métodos, ventajas y diferentes ejemplos. También puede consultar nuestro otro artículo sugerido para obtener más información.

  1. ¿Qué es la interfaz Java?
  2. ¿Qué es la interfaz Java?
  3. Herramientas Java
  4. Diseño en Java
  5. Constructor y Destructor en Java
  6. Ejemplos de Destructor en Python
  7. JRE vs JVM | Las 8 principales diferencias con (infografía)
  8. Destructor en PHP con ejemplos