2010-08-14 14 views

Respuesta

17

Sí. Si bloquea la máquina virtual de Java o de otra manera arruina las cosas a través de código nativo, haga que el programa termine o bucle/espere infinitamente dentro del bloque try.

Esos son los únicos tres casos que evitarán la ejecución del bloque finally.

+3

Llamando System.exit o turning de la computadora probablemente cuenta como "causa que el programa termine" ... :-) –

+0

@Rasmus Kaj: De acuerdo. – Borealid

+0

Si en el bloque try, regresas de la función que contiene esta frase try/catch/finally, ¿el bloque finally se ejecutará? – euphoria83

5

Si llama al System.exit(0) en el try. O haga algo que haga que la JVM se cierre o cuelgue (como un interbloqueo). De otra manera no.

+0

JNI probablemente podría, sin embargo. –

2

La especificación de idioma de Java guarantees que finalmente se invoca antes de que finalice la instrucción try.

La instrucción try puede no completarse por las razones habituales, que se han enumerado en la respuesta de Borealid.

+1

"finalmente se invoca antes de que finalice la instrucción try" ??? should not "before" be "when" –

+2

Una declaración try- * consiste en try- * block *, cualquier catch blocks, y opcionalmente un finally-block. – meriton

0

El bloque finally definitivamente se ejecutará si el control sale del try o del catch block. Si de alguna forma las arregla para detener el control al salir de estos bloques:

  • escribiendo sentencia exit, o

  • bucle infinito etc.

entonces el bloque finally voluntad no ser ejecutado En general, escribimos el bloque finally para el propósito de "limpieza".

Cuestiones relacionadas