En este código se someVar
establecerá incluso si se ejecuta el bloque catch y se lanza la segunda excepción?
public void someFunction() throws Exception {
try {
//CODE HERE
} catch (Exception e) {
Log.e(TAG, "", e);
throw new Exception(e);
} finally {
this.someVar= true;
}
}
Respuestas:
Sí, los bloques finalmente siempre se ejecutan ... excepto cuando:
System.exit(0);
Además, si un método en su bloque finalmente arroja una excepción no detectada, entonces nada más se ejecutará (es decir, la excepción se lanzará como lo haría en cualquier otro código). Un caso muy común donde esto sucede es
java.sql.Connection.close()
.Por otro lado, supongo que la muestra de código que ha utilizado es simplemente un ejemplo, pero tenga cuidado de poner la lógica real dentro de un bloque finalmente. El último bloque está destinado a la limpieza de recursos (cierre de conexiones de base de datos, liberación de identificadores de archivos, etc.), no para la lógica de ejecución obligatoria. Si debe ejecutarse, hágalo antes del bloque try-catch, lejos de algo que pueda generar una excepción, ya que su intención es casi funcionalmente la misma.
fuente
finally
entonces se especifica en términos de terminaciones normales y abruptas.Si.
Ver la documentación :
Excepciones:
fuente
Finalmente, el bloque siempre se ejecuta.
}
fuente
Finalmente siempre se ejecuta, no importa cuál sea su caso, es decir
Para excepciones no marcadas, Java no exige el manejo de errores. esta es la razón, si se produce una excepción no verificada en el bloque finalmente y no se realiza ningún tratamiento para eso, entonces el código escrito debajo de este punto (donde se ha producido el error) no se ejecutará.
Por lo tanto, sugiero manejar siempre todas las excepciones, ya sea que esté marcado o desmarcado. De esta forma, puede asegurarse de que el bloqueo de código finalmente también se ejecute sin importar si también se produce una excepción no verificada. usted tiene un lugar en la captura de sub-nido y finalmente bloquea para realizar su trabajo necesario.
fuente
El último bloque siempre se ejecuta cuando el bloque try sale. A menos que tenga System.exit (0) en su try o catch.
fuente
Si.
finally
El bloque se ejecuta siempre, excepto en el caso de que llame a System.exit () porque detiene Java VM.fuente