You are on page 1of 19

Object

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

Dos tipos de situaciones excepcionales


Excepciones
Situaciones ms o menos habituales que impiden completar la ejecucin correcta del cdigo Generalmente el programador debe proporcionar el cdigo que las trate o gestione Ejemplos
Error en el cdigo o en los datos Uso inadecuado de un mtod

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

Dos tipos de situaciones excepcionales


Errores
Representan situaciones de error normalmente no recuperables El programador normalmente no tiene que proporcionar un tratamiento para ellas Ejemplos
No se puede localizar y cargar una clase, Se agota la memoria

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

Generadas por el programador


El programa explcitamente genera una excepcin al detectar una situacin de error que no se puede resolver en ese contexto til en situaciones de prueba y depuracin
Java Excepciones 6

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

Mtodomain() main() Mtodo

Paso de excepciones

Primermtodo mtodo Primer

Segundomtodo mtodo Segundo (Excepcingenerada generadaaqu) aqu) (Excepcin Todas las excepciones que se puedan generar se han de manejar o delegar
Java Excepciones 15

Propagacin de excepciones fee() fie() foe()


throws X
try { //... fie(); //... } catch (X e) { //... } finally { //... }
Java Excepciones 16

throws X

try { //... foe(); //... } finally { //... } //... throw new X(); //...

Excepciones
RuntimeExceptions
ArrayIndexOutOfBoundsExce ption ArithmeticException NullPointerException ClassCastException IllegalArgumentException

No es obligatorio incluir cdigo de tratamiento de este tipo de excepciones


aunque se puede incluir dicho cdigo
Java Excepciones 17

Ejemplo simple excepciones


public class class PruebaExcepciones PruebaExcepciones { { 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 array = = {1, {1, 2, 2, 3}; 3}; int[] try { { try valor = = valor/cero; valor/cero; //divisin //divisin por por cero cero valor array[4]= 5; 5; //acceso //acceso a a una una posicin posicin no no disponible disponible array[4]= } } catch( ArithmeticException e e) ){ { catch( ArithmeticException System.out.println( "Division "Division por por cero" cero" ); ); System.out.println( } } catch( Exception Exception e e) ){ { catch( System.out.println( "Se ha ha producido producido un un error" error" ); ); System.out.println( "Se } } } } } }
Java Excepciones 18

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

Gestin incompleta de excepciones


TipoDevuelto nombreMetodo(argumentos) throws listaExcepciones { /* cuerpo del mtodo */ }

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

Gestin incompleta de excepciones


import java.io.*; java.io.*; import public class class PruebaExcepciones PruebaExcepciones { { public public static char leer() throws IOException IOException { { public static char leer() throws return (char) (char) System.in.read(); System.in.read(); return } } public static static void void main(String main(String args[]) args[]) { { public try { try { char car=leer(); car=leer(); char System.out.println("Caracter: "+car); "+car); System.out.println("Caracter: } catch catch (IOException (IOException e) e) { { } System.out.println("Error de entrada entrada de de datos"); datos"); System.out.println("Error de } } } }

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 } }

Excepciones definidas por el programador


El programador puede definir sus propias clases de excepciones
Se define una clase que herede de Throwable o ms normalmente de

Exception
public class EdadFueraDeRangoException extends Exception { public EdadFueraDeRangoException (String texto) { super(texto); } }
Java Excepciones 24

Excepciones definidas por el usuario


public class FileInputStream extends InputStream{ public FileInputStream(String aFileName) throws IOException { if (...) { throw new IOException("No Such File"); } ... } ... }
Java Excepciones 25

Excepciones definidas por el usuario


Gestiona la excepcin, incluyendo en el cdigo los bloques try-catch-finally Se considera que una excepcin est tratada incluso si el bloque catch est vaco. Indica que el cdigo producir una excepcin, que no se tratar dentro de l y se pasar al mtodo superior, utilizando la clusula throws.

Java

Excepciones

26

Excepciones definidas por el usuario


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

27

Ejemplo excepcin definida por el usuario


Public class Persona{ int edad; ..... public void ponEdad(int ed) throws EdadFueraDeRangoException { if ((ed < 0) || (ed > 130)) throw new EdadFueraDeRangoException("Demasiado joven o demasiado viejo"); edad = ed; }} try { alguien.ponEdad(150); } catch (EdadFueraDeRangoException e){ System.out.println("se ha producido la excepcin"); e.printStackTrace(); System.out.println(e.getMessage()); } EdadFueraDeRangoException: Demasiado joven o demasiado viejo at Persona.ponEdad<Persona.java> at Persona.main<Persona.java>
Java Excepciones 28

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

public void test() throws ExceptionB

ExceptionB

Java

Excepciones

33

Sobreescritura de mtodos
public void test() throws ExceptionA Exception

extends sobre escribe

public void test() throws ExceptionC

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

You might also like