miércoles, 23 de marzo de 2011

Finalizar objetos en Java

Cuando un objeto ya no está en uso por el programa es eliminado de memoria por el garbage collector. Antes de que ocurra todo esto podemos ejecutar el método finalice() el cual nos permite ejecutar las acciones pertinentes sobre el objeto antes de que sea eliminado. Por ejemplo... la gestión de ficheros o bases de datos en los que se deberán cerrar las conexiones de dichos recursos. La definición se realizaría de la siguiente manera:

protected void finalize() throws Throwable{
  System.out.println("Finalizando el Objeto");
  super.finalize();
 }

Al incluir el método finalice() sobre un objeto estamos sobrescribiendo el método por defecto que viene en la clase Object. Mediante la sentencia super.finalice() estamos ejecutando el método finalize() de la clase padre.

De todas formas el método no se ejecutará hasta que no pase el garbage collector, pero aun así existe la posibilidad de surgerir a la máquina virtual de java que se ejecute el finalize. Esto se consigue ejecutando el el método runFinalization() de la clase System. Como ya e dicho es solo una "surgerencia" no implica una ejecucción directa de los métodos finalize(). Un ejemplo del código en ejecución seria la siguiente:

public static void main(String[] args) {
  FinalizarUnObjeto fuo = new FinalizarUnObjeto();
  System.out.println(fuo.toString());
  fuo = null;
  System.runFinalization();
 }