You are on page 1of 8

Manejo de excepciones en Java Yony Montoya

Universidad Mayor de San Simón

Excepciones
• Una excepción es un evento que ocurre durante la ejecución de un programa que rompe el flujo normal de ejecución. Cuando se habla de excepciones nos referimos a evento excepcional. • Muchas cosas pueden generar excepciones: Errores de hardware (falla de disco), de programa (acceso fuera de rango en arreglo), apertura de archivo inexistente, etc. • Cuando se produce una excepción dentro de un método de Java, éste crea un objeto que contiene información sobre la excepción y lo pasa al código llamador.

Universidad Mayor de San Simón

1

} Universidad Mayor de San Simón 2 . Asignar memoria. • Cuando creamos un objeto para la excepción y lo pasamos al código llamador decimos que lanzamos una excepción (Throw an exception) • Si el método llamador no tiene un manejador de la excepción se busca hacia atrás en la pila de llamados anidados hasta encontrarlo. • Decimos que el manejador atrapa la excepción (catch the exception) Universidad Mayor de San Simón Ventajas de usar excepciones • Suponga que se quiere hacer siguiente tarea: readFile { abrir el archivo. determinar su tamaño. leer el archivo en memoria. cerrar el archivo.Excepciones • La rutina receptora de la excepción es responsable de reaccionar a tal evento inesperado.

} catch (readFailed) { doSomething. – Ej: • Si hay más de un archivo el que se abre. leer el archivo en memoria. } catch (fileCloseFailed) { doSomething.Ventajas de usar excepciones • Con excepciones: readFile { try { abrir archivo. basta con capturar la base para manejar cualquiera de sus instancias derivadas. }} Universidad Mayor de San Simón Excepciones • Otras ventajas de las excepciones son: – Propaga los errores hacia atrás en la secuencia de llamados anidados. determinar su tamaño. basta con un código para capturar tal caso. asignar memoria. } catch (memoryAllocationFailed) { doSomething. cerrar el rchivo. Universidad Mayor de San Simón 3 . } catch (sizeDeterminationFailed) { doSomething. • Si se lanzan excepciones que son todas subclases de una base. } catch (fileOpenFailed) { doSomething. – Se agrupan los errores según su naturaleza.

Throwable e = new IllegalArgumentException(“Stack underflow”). Ej.Excepciones • En Java los objetos lanzados deben ser instancias de clases derivadas de Throwable. Universidad Mayor de San Simón Manejo de Excepciones • El manejo de excepciones se logra con el bloque try try { // código } catch (StackError e ) { // código que se hace cargo del error reportado en e } • El bloque try puede manejar múltiples excepciones: try { // código } catch (StackError e ) { // código para manejar el error de stack } catch (MathError me) { // código para manejar el error matemático indicado en me. • O alternativamente throw new IllegalArgumentException(“Stack underflow”). } Universidad Mayor de San Simón 4 . • Si una excepción no es procesada. debe ser relanzada. throw e.

Captura de Excepciones (completo) • El bloque try tiene la forma general: try { //sentencias } catch (e-type1 e ) { // sentencias } catch (e-type2 e ) { // sentencias } . finally { //sentencias } • La cláusula finally es ejecutada con posterioridad cualquiera sea la condición de término del try (sin o con error).err. } } catch ( IOException e ) { System. out. System.toLowerCase( (char) c)..exit(1). } } Universidad Mayor de San Simón 5 .read()) >=0 ) { c= Character.println(“doio: I/O Problem”). Universidad Mayor de San Simón Ejemplo 1 • public static void doio (InputStream in. OutputStream out) { int c. try { while (( c=in.write( c )..

File tmp_file = new File(tmp_name). try { FileInputStream infile = new FileInputStream(argv[0]). } • Universidad Mayor de San Simón El código de la sección finally es ejecutado no importando si el bloque try terminó normalmente.err.close(). • El compilador chequea por la captura de las excepciones lanzadas por los objetos usados en el código.println(“Can´t open input file “+ argv[0]). if (tmp_file != null) tmp_file. o break. sino incluidas por el programador. por return.. por excepción. }finally { if ( infile != null) infile. error = true.Ejemplo 2 • . Tipos de Excepciones • Generadas por el lenguaje Java.exit().. Éstas se generan cuando hay errores de ejecución. • Si una excepción no es capturada debe ser relanzada.. } catch (FileNotFoundException e) { System. Universidad Mayor de San Simón 6 .. . etc... error = true. • No generadas por el lenguaje.err.. como al tratar de acceder a métodos de una referencia no asignada a un objeto.close().. división por cero. } catch (IOException e ) { System.println(“Can´t open temporary file “+tmp_name). if (error) System.

OutputStream out) throws Throwable { int c.Reenviando Excepciones • public static void doio (InputStream in. int d) throws DivisionPorCeroException { if (d == 0) { DivisionPorCeroException myExc = new DivisionPorCeroException(“Fraction: Denominador es cero?”).toLowerCase( (char) c).read()) >=0 ) En este caso el método { c= Character. } !!! Si se usa la cláusula throw debe indicarse en su declaración con la cláusula throws. public DivisionPorCeroException () {} public DivisionPorCeroException(String s) { super(s). Si la excepción no es while (( c=in. public Fraction (int n. • • • Universidad Mayor de San Simón Creación de excepciones • • Siempre es posible lanzar alguna excepción de las ya definidas en Java (IOException por ejemplo)... try { while (( c=in.setNumerator(n).. envía una excepción .. se entiende { reenviada c= Character.read()) >=0 ) capturada. out. exp2 { int c. También se puede definir nuevas excepciones creando clases derivadas de las clases Error o Exception. } Universidad Mayor de San Simón • Luego se puede usar : 7 . . OutputStream out) throws IOException // en caso de más de una excepción throws exp1.write( c ).. } } Alternativamente: public static void doio (InputStream in. } public setNumerator(int _n) { n = _n} // otros métodos de interés } .. myExc.write( c ). out.toLowerCase( (char) c).que } aquí corresponde al mismo } catch ( Throwable t ) { objeto capturado -por lo throw t. class DivisionPorCeroException extends Exception { private int n. throw (myExc). tanto debe declarase en la } cláusula throws.

• Cuando creemos nuestras excepciones. • Java no obliga a manejar o reenviar RuntimeException. serán subclases de Exception.Jerarquía de Excepciones • Java prohibe crear subclases de Throwable. Universidad Mayor de San Simón 8 .