Estoy revisando un nuevo código. El programa tiene una prueba y finalmente solo un bloqueo. Dado que el bloque catch está excluido, ¿cómo funciona el bloque try si encuentra una excepción o algo arrojable? ¿Simplemente va directamente al bloque finalmente?
java
try-catch
finally
try-catch-finally
try-finally
NullPointer0x00
fuente
fuente
Respuestas:
Si alguno de los códigos en el bloque try puede generar una excepción marcada, debe aparecer en la cláusula throws de la firma del método. Si se lanza una excepción no marcada, se elimina del método.
El último bloque siempre se ejecuta, ya sea que se lance una excepción o no.
fuente
Una pequeña nota sobre
try
/finally
: El finalmente siempre se ejecutará a menos queSystem.exit()
se llama.try{}
bloque nunca termina (por ejemplo, bucle sin fin).fuente
try{..} catch{ throw ..} finally{..}
? Creo que finalmente no será ejecutadoLa especificación del lenguaje Java (1) describe cómo
try-catch-finally
se ejecuta. No tener captura es equivalente a no tener una captura capaz de atrapar el Lanzamiento dado.(1) Ejecución de try-catch-finally
fuente
El interno finalmente se ejecuta antes de lanzar la excepción al bloque externo.
Resultados en
fuente
El bloque finalmente siempre se ejecuta después de que finaliza el bloque try, ya sea que el try finalice de manera normal o anormal debido a una excepción, er, arrojable.
Si alguno de los códigos del bloque de prueba genera una excepción, el método actual simplemente vuelve a lanzar (o continúa lanzando) la misma excepción (después de ejecutar el bloque finalmente).
Si el bloque finalmente arroja una excepción / error / lanzamiento, y ya hay un lanzamiento pendiente, se pone feo. Francamente, olvido exactamente lo que sucede (tanto por mi certificación hace años). Yo pienso ambos lanzamientos se vinculan entre sí, pero hay que hacer un vudú especial (es decir, una llamada al método que tendría que buscar) para obtener el problema original antes de que el "finalmente" vomitara, er, vomitara.
Por cierto, intentar / finalmente es algo bastante común para la gestión de recursos, ya que Java no tiene destructores.
P.ej -
"Finalmente", un consejo más: si no se molestan en poner en una captura, ya sea específica de captura (esperado) subclases arrojadizos, o simplemente coger "Throwable", no "excepción", por un cajón de sastre trampa de error general. Demasiados problemas, tales como tonterías de reflexión, arrojan "Errores", en lugar de "Excepciones", y esos se deslizarán por cualquier "capturar todo" codificado como:
haz esto en su lugar:
fuente
Las versiones de Java anteriores a la versión 7 permiten estas tres combinaciones de try-catch-finally ...
finally
El bloque siempre se ejecutará sin importar lo que esté sucediendo en el bloquetry
or / andcatch
. así que si no haycatch
bloque, la excepción no se manejará aquí.Sin embargo, aún necesitará un controlador de excepciones en algún lugar de su código, a menos que, por supuesto, desee que su aplicación se bloquee por completo. Depende de la arquitectura de su aplicación exactamente dónde está ese controlador.
fuente
La excepción se elimina del bloque, como en cualquier otro caso en el que no se detecta.
El último bloque se ejecuta independientemente de cómo salga el bloque de prueba, independientemente de si hay capturas, independientemente de si hay una captura coincidente.
Los bloques catch y finalmente son partes ortogonales del bloque try. Puedes tener uno o ambos. ¡Con Java 7, no podrás tener ninguno!
fuente
¿No lo intentas con ese programa? Finalmente se bloqueará y ejecutará finalmente el bloqueo, pero la excepción no se manejará. ¡Pero esa excepción puede ser anulada en el bloque finalmente!
fuente
El bloque finalmente se ejecuta después de que se completa el bloque try. Si se arroja algo dentro del bloque try cuando sale, finalmente se ejecuta el bloque.
fuente
Dentro del
try
bloque escribimos códigos que pueden arrojar una excepción. Elcatch
bloque es donde manejamos la excepción. Elfinally
bloque siempre se ejecuta sin importar si se produce una excepción o no.Ahora, si tenemos el bloque try-finally en lugar del bloque try-catch-finally, entonces la excepción no se manejará y después de que el bloque try en lugar del control vaya al bloque catch, finalmente se bloqueará. Podemos usar el bloque try-finally cuando no queremos hacer nada con la excepción.
fuente
Independientemente de la excepción lanzada o no en
try
bloque,finally
se ejecutará el bloque. La excepción no sería atrapada.fuente