2010-06-14 20 views
5

¿Qué pasaría si se produce una excepción durante la ejecución de finalize()? ¿La pila se desenrolla normalmente? ¿Continúa finalize() e ignora la excepción? ¿Se detiene finalize() y continúa GC el objeto? ¿O algo mas?¿Qué sucede si se lanza una excepción durante finalize()

No estoy buscando directrices para utilizar finalize() hay muchas páginas explicando eso.

Respuesta

9

Desde el Object#finalize() javadoc:

Cualquier excepción lanzada por el método de finalización provoca la finalización de este objeto a ser detenido, pero por lo demás ignorados.

+4

Completamente relacionado con la pregunta, pero ... ME ENCANTA TU AVATAR. Grim Fandango fue el mejor juego ¡EVAR! –

+2

Manuel definitivamente ha sido finalizado. – cmccabe

4

La forma correcta de codificar un finalizador, suponiendo que tiene una razón válida para escribir uno en absoluto, es la siguiente:

protected void finalize() throws Throwable 
{ 
    try 
    { 
    // my finalization code 
    } 
    finally 
    { 
    super.finalize(); 
    } 
} 
1

En caso de excepción sería expulsado, entonces la invocación de finalización será se terminará, y la próxima vez no se invocará, pero el objeto será GC-ed de la memoria.

Cuestiones relacionadas