Errores II : Finally

Cuando ejecutamos código que puede generar excepciones puede pasar que parte de lo que debería suceder nuca llegue a pasar porque se ha producido una exepción y aunque la hemos capturado y procesado eso nos deja en una situación inestable o no deseada. Imagina un programa que enciende y apaga luces, por ejemplo. Como que somos muy cuidadosos, queremos que SIEMPRE al final del programa estén TODAS las luces apagadas. Aunque haya habído excepciones y un interruptor haya fallado. La forma perfecta de controlar eso es con finally. Finally es el código que se ejecutará SIEMPRE al final de un bloque try{}.

Fijate en el ejemplo:

//EjecucionFinally.java
class ExcepctionTres extends Exception{}
public class EjecucionFinally{
	static int contador =0;
	public static void main(String[] args){
		System.out.println("inicio de ejecucion");
		while(true){
			try{
				// el post-incremento es 0 la primera vez....
				if(contador++ ==0){
					throw new ExcepctionTres();	
				}
				System.out.println("ejecucion "+ contador + " sin excepcion");
			}catch(ExcepctionTres e){
				System.err.println("ejecucion "+ contador + " lanza excepcion tres");
			}finally{
				System.err.println("entrando en el finally");
				if(contador == 3) break; // salida del while
			}
		}
	}
}

y mira la salida por pantalla…

inicio de ejecucion
ejecucion 1 lanza excepcion tres
entrando en el finally
ejecucion 2 sin excepcion
entrando en el finally
ejecucion 3 sin excepcion
entrando en el finally

Fijate que finaly se ejecuta siempre, tanto si hay excepcion como si no hay excepción. Por lo tanto, en el caso de las luces y los interruptores es el lugar apropiado para apagarlas todas y estar seguros que nos vamos con todas las luces apagadas porque SIEMPRE se ejecutará. Para ver una lista de las excepciones posibles puedes consultar en la documentación de java sobre su api

 
java/21.txt · Última modificación: 2008/05/13 10:00 (editor externo)
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki