28 votos

¿Cuál es el punto de que el bloque finally?

La sintaxis de lado, ¿cuál es la diferencia entre

try {
}
catch() {
}
finally {
    x = 3;
}

y

try {
}
catch() {
}

x = 3;

edit: en .NET 2.0?


así

try {
    throw something maybe
    x = 3
}
catch (...) {
    x = 3
}

es la conducta equivalente?

35voto

Josh Hinman Puntos 4064

Bueno, por una cosa, si usted devuelve el interior del bloque try, el que finalmente va a ejecutar, pero el código que aparece debajo de la try-catch-finally bloque no.

31voto

Vinko Vrsalovic Puntos 116138

Depende del idioma, pues podría haber algunas pequeñas diferencias semánticas, pero la idea es que se va a ejecutar (casi) siempre, incluso si el código del bloque try lanzó una excepción.

En el segundo ejemplo, si el código del bloque catch devuelve o se cierra, la x = 3 no se ejecutará. En la primera lo hará.

En el .NETO de la plataforma, en algunos casos, la ejecución del bloque finally que no se produzcan: Las Excepciones de seguridad, Hilo de suspensiones, Ordenador apagado :), etc.

10voto

SCdF Puntos 11397

En Java:

Finalmente siempre se llama, independientemente de si la excepción fue correctamente capturados en la captura(), o de hecho, si tienes una captura.

9voto

bibix Puntos 1915

try catch , finalmente, es muy importante construir. Usted puede estar seguro de que incluso si se produce una excepción, el código en el bloque finally se ejecutará. Es muy importante en el manejo de recursos externos para la liberación de ellos. La recolección de basura no va a hacer eso para usted. Finalmente la parte que usted no tenga retorno declaraciones o lanzar excepciones. Es posible hacer eso, pero es una mala práctica y puede dar lugar a resultados impredecibles.

Si usted intenta este ejemplo:

try {
  return 0;
} finally {
  return 2;
}

El resultado será 2:)

La comparación con otras lenguas: Retorno De Finalmente

3voto

wvdschel Puntos 6111

Hay varias cosas que hacen de un bloque finally útil:

  1. Si el retorno de la try o catch bloques, el bloque finally es todavía ejecutado, justo antes de que el control se devuelve a la función de llamada
  2. Si se produce una excepción en el bloque catch, o un uncaught tipo de excepción se produce en el bloque try, el código en el bloque finally está siendo ejecutado.

Estos hacen que finalmente bloques excelente para el cierre de los identificadores de archivo o sockets.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X