Professional Documents
Culture Documents
Throwable
Excepciones
Exception
Error
RuntimeException
IOException
FileNotFoundException
Java
Excepciones
Excepciones
Situaciones anmalas que aparecen durante la ejecucin de un programa
Cuando aparece una condicin excepcional se crea un objeto Throwable que se enva al mtodo que la ha generado
Java
Excepciones
Excepciones
Su gestin permite la deteccin y correccin de errores en ejecucin
Simplifican los programas ya que se diferencia el cdigo normal del cdigo de tratamiento de errores Se crean programas mas robustos ya que en muchos casos si no se trata la excepcin el programa no compila Slo se deben usar cuando no se puede resolver la situacin anmala directamente en ese contexto
Se tiene que seguir haciendo el control de errores habitual
Java Excepciones 3
Ejemplo, la excepcin ArrayIndexOutOfBoundsException no debera lanzarse nunca si los ndices de acceso a un vector no se salen de los lmites.
Java Excepciones 4
Java
Excepciones
Tipos de excepciones
Predefinidas en el sistema
Se lanzan automticamente cuando se realiza alguna operacin no valida
acceso a un objeto que no existe, acceso a una posicin de un array que no existe, divisin por cero
Ejemplo
public class HolaMundo { public static void main (String args[]){ int i = 0; String vectorS [] = { "Hola mundo1", "Hola mundo 2", "Hola mundo 3" }; while (i < 4 ) { System.out.println(vectorS[i]); i++; } } }
Java
Excepciones
Ejemplo
c:\...\>java HolaMundo HolaMundo 1 HolaMundo 2 HolaMundo 3 java,lang.ArrayIndexOutBoundsException : 3 at HolaMundo.main(HolaMundo.java:12)
Java
Excepciones
Tipos de excepciones
Object Throwable No Recuperable Error Solo se puede hacer throuh a las throwables Recuperable Exception
...
Runtime Exception
...
Nuestras excepciones
...
Java
Excepciones
Gestin de excepciones
Para gestionar excepciones hay que insertar el cdigo donde se puede dar dentro de un bloque try. Se crea una lista de bloques catch adyacentes, uno por cada posible excepcin.
Java
Excepciones
10
Gestin de excepciones
Sintaxis
try { { try // bloque bloque de de cdigo cdigo donde donde puede puede producirse producirse una una excepcin excepcin // } catch ( TipoExcepcin1 TipoExcepcin1 e e) ){ { } catch ( // gestor de excepciones para TipoExcepcin1 TipoExcepcin1 // gestor de excepciones para TipoExcepcin1 // se se ejecuta ejecuta si si se se produce produce una una excepcin excepcin de de tipo tipo TipoExcepcin1 // } catch ( TipoExcepcion2 TipoExcepcion2 e e) ){ { } catch ( // gestor gestor de de excepciones excepciones para para TipoExcepcin2 TipoExcepcin2 // throw (e); // se puede volver a lanzar lanzar la la excepcin excepcin propagar propagar throw(e); // se puede volver a } finally finally { { } // bloque bloque de de cdigo cdigo que que se se ejecuta ejecuta siempre, siempre, haya haya o o no no excepcin excepcin // } }
Java
Excepciones
11
Gestin de excepciones
try { /*...*/} catch (OverflowException e) { /*...*/} catch (MathError e) { /*...*/} catch (Exception e) { /*...*/} finally{ /*...*/}
Exception MathError
OverflowException
Java
Excepciones
12
Gestin de excepciones
finally
Es el bloque de cdigo que se ejecuta siempre, haya o no excepcin try { inicioProceso (); gestionProceso(); } finally { finProceso (); } La nica situacin en la que la sentencia finally no se ejecuta es si se llama al mtodo System.exit (), que termina la ejecucin del programa.
Java
Excepciones
13
Gestin de excepciones
throw
Permite lanzar de forma explcita una excepcin Se puede utilizar para propagar una excepcin tratada parcialmente
Java
Excepciones
14
Propagacin de excepciones
Entorno Java Entorno Java EntornoJava Java Entorno (Java runtime) (Java runtime) (Java runtime) (Java runtime)
Llamadas mtodos
Paso de excepciones
Segundomtodo mtodo Segundo (Excepcingenerada generadaaqu) aqu) (Excepcin Todas las excepciones que se puedan generar se han de manejar o delegar
Java Excepciones 15
throws X
try { //... foe(); //... } finally { //... } //... throw new X(); //...
Excepciones
RuntimeExceptions
ArrayIndexOutOfBoundsExce ption ArithmeticException NullPointerException ClassCastException IllegalArgumentException
Propagacin de excepciones
public class class PruebaExcepcion PruebaExcepcion { { public public static static void void main(String main(String args[]) args[]) { { public int valor=5, valor=5, cero=0; cero=0; int int[] array = {1, 2, 2, 3}; 3}; int[] array = {1, try { { try try { { try valor = = valor/cero; valor/cero; //divisin //divisin por por cero cero valor array[4]= 5; //acceso a una posicin no disponible disponible array[4]= 5; //acceso a una posicin no }catch( ArithmeticException ArithmeticException e e) ){ { }catch( System.out.println( "Division "Division por por cero" cero" ); ); System.out.println( throw e; throw e; }catch( Exception Exception e e) ){ { }catch( System.out.println( "Se "Se ha ha producido producido un un error" error" ); ); System.out.println( } } }catch(Exception e){ e){ }catch(Exception System.out.println(e.getMessage()); System.out.println(e.getMessage()); } } } } Java Excepciones 19 } }
throws
Indica que el cdigo producir una excepcin, que no se tratar dentro de l y se pasar al mtodo superior, utilizando la clusula throws.
public void ejemploExcep () throws IOException
A continuacin de la palabra reservada throws aparece una lista de todas las excepciones que se pueden dar dentro del mtodo y no sern gestionadas.
Java Excepciones 20
Si un mtodo no gestiona o captura todas las excepciones que puede generar (excepto del tipo Error o RuntimeException) debe especificarlo mediante throws
TipoDevuelto nombreMetodo(argumentos) throws listaExcepciones { /* cuerpo del mtodo */ }
Java Excepciones 21
Java
Excepciones
22
Lanzamiento de excepciones
public class class Alumno{ Alumno{ public public Alumno(String Alumno(String nombre, nombre, String String apellidos) apellidos) public throws Exception{ Exception{ throws if(nombre == == null null || || apellidos apellidos == == null) null) if(nombre throw new new Exception("Argumentos Exception("Argumentos no no vlidos"); vlidos"); throw //si el el constructor constructor lanza lanza la la excepcin excepcin el el objeto objeto //si //no se se crea crea //no } } public static static void void main(String main(String args[]) args[]) { { public try{ try{ Alumno alum alum = = new new Alumno(null, Alumno(null, "hola"); "hola"); Alumno }catch (Exception (Exception e){ e){ }catch System.out.println("Excepcion: "+ "+ System.out.println("Excepcion: e.getMessage()); e.getMessage()); } } } } Java Excepciones 23 } }
Exception
public class EdadFueraDeRangoException extends Exception { public EdadFueraDeRangoException (String texto) { super(texto); } }
Java Excepciones 24
Java
Excepciones
26
Java
Excepciones
27
Ejemplo
public void connectMe (String serverName) throws ServerTimedOutException { int success; int portToConnect = 80; success = open (serverName, portToConnect); if (success == -1) { throw new ServerTimedOutException("Imposible conectarse", 80); } }
Java Excepciones 29
Ejemplo
public void findServer(){ ... try { connectMe(defaultServer); } catch (ServerTimedOutException e) { System.out.println ("Server timed out, trying alternate"); try { connectMe(alternateServer); } catch (ServerTimedOutException e1) { System.out.println("No server currently available");} Java Excepciones 30 }....
Excepciones ms frecuentes
ArithmeticException int i = 12 / 0; NullPointerException Date d = null; System.out.println (d.toString()); NegativeArraySizeException Intento de creacin de un vector con un nmero negativo de elementos
Java Excepciones 31
Excepciones ms frecuentes
ArrayIndexOutOfSizeException Intento de acceso a un elemento de un vector fuera de rango SecurityException Error de seguridad en los navegadores.
Java
Excepciones
32
Sobreescritura de mtodos
public void test() throws ExceptionA ExceptionA
sobre escribe
extends
ExceptionB
Java
Excepciones
33
Sobreescritura de mtodos
public void test() throws ExceptionA Exception
ExceptionA
ExceptionC
No compila
Java Excepciones 34
Ejercicio 1: Exception
Un banco contiene las Cuentas de sus clientes. Las CuentasDeAhorro no pueden tener nmeros rojos. Las CuentasCorrientes pueden tener una CuentaDeAhorro asociada, de forma que si se intenta retirar ms dinero del saldo actual, se debe retirar el dinero que falte de la CuentaDeAhorro asociada. 1) Define Cuenta de forma que no pueda instanciarse. De toda Cuenta se debe poder ingresar y retirar dinero, preguntar por el saldo, por el DNI del titular y debe tener un mtodo toString de devuelva al menos el saldo y el DNI del titular.
Java
Excepciones
35
Ejercicio
2) Implementa las clases CuentaCorriente y CuentaDeAhorro. 3) Crea una especializacin CuentaDeAhorroEsp de CuentaDeAhorro en la que se aade un entero penalizacin, de forma que se penaliza la retirada con un penalizacin % del dinero retirado. Sobrescribe slo los mtodos necesarios (incluyendo constructor y toString ). 4) Si el saldo de CuentaDeAhorro fuese a quedar negativo, antes de debe lanzar una excepcin SaldoNegativo (que hereda de Exception).
Java
Excepciones
36
Ejercicio
5) Implementa la clase Banco que contiene un array polimrfico de Cuentas, incluyendo el constructor que consideres ms apropiado. 6) Incluye el mtodo totalSaldoMaxPenalizacin en la clase Banco que devuelva la suma de los saldos de todas las cuentas corrientes y la mxima penalizacin entre las CuentaDeAhorroEsp . Crea una clase con mtodo main en la que instanciamos un Banco de 100 Cuentas, nos creamos una CuentaCorriente con 500 euros y una cuenta de ahorrro especial con una penalizacin del 5%. Finalmente debe mostrar informacin de todas las Cuentas del Banco. En un bloque try & catch retirar dinero de una cuenta de Ahorro.
Java Excepciones 37