Excepciones. Excepciones. Dos tipos de situaciones excepcionales. Excepciones. Dos tipos de situaciones excepcionales. Tipos de excepciones

Excepciones Object Situaciones anómalas que aparecen durante la ejecución de un programa Throwable Excepciones Exception RuntimeException Error ...
0 downloads 4 Views 185KB Size
Excepciones

Object

Situaciones anómalas que aparecen durante la ejecución de un programa

Throwable

Excepciones Exception

RuntimeException

Error

w Cuando aparece una condición excepcional se

crea un objeto Throwable que se envía al método que la ha generado

IOException

FileNotFoundException

Java

Excepciones

1

Su gestión permite la detección y corrección de errores en ejecución

n

n

n

w Se tiene que seguir haciendo el control de errores habitual Excepciones

n

n

Situaciones más o menos habituales que impiden completar la ejecución correcta del código Generalmente el programador debe proporcionar el código que las trate o gestione Ejemplos w Error en el código o en los datos w Uso inadecuado de un métod

Ejemplo, la excepción ArrayIndexOutOfBoundsException no debería lanzarse nunca si los índices de acceso a un vector no se salen de los límites. Java

Excepciones

4

Tipos de excepciones

Errores

n

n

3

Dos tipos de situaciones excepcionales n

2

Excepciones

Simplifican los programas ya que se diferencia el código normal del código de tratamiento de errores Se crean programas mas robustos ya que en muchos casos si no se trata la excepción el programa no compila Sólo se deben usar cuando no se puede resolver la situación anómala directamente en ese contexto

Java

Excepciones

Dos tipos de situaciones excepcionales

Excepciones

n

Java

Predefinidas en el sistema

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

n

w acceso a un objeto que no existe, w acceso a una posición de un array que no existe, w división por cero

Generadas por el programador n

agota la memoria

n Java

Excepciones

5

Se lanzan automáticamente cuando se realiza alguna operación no valida

El programa explícitamente genera una excepción al detectar una situación de error que no se puede resolver en ese contexto Útil en situaciones de prueba y depuración Java

Excepciones

6

1

Ejemplo

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

c:\...\>java HolaMundo HolaMundo 1 HolaMundo 2 HolaMundo 3 java,lang.ArrayIndexOutBoundsException : 3 at HolaMundo.main(HolaMundo.java:12)

7

Tipos de excepciones

Java

Excepciones

8

Gestión de excepciones

Object

Throwable No Recuperable

Para gestionar excepciones hay que insertar el código donde se puede dar dentro de un bloque try. Se crea una lista de bloques catch adyacentes, uno por cada posible excepción.

Solo se puede hacer throuh a las throwables Recuperable

Error

Exception

... Runtime Exception

... Nuestras excepciones

...

Java

Excepciones

9

Gestión de excepciones

try {{ try // bloque bloque de de código código donde donde puede puede producirse producirse una una excepción excepción // }catch( TipoExcepción1 TipoExcepción1 ee )) {{ }catch( // gestor gestor de de excepciones excepciones para para TipoExcepción1 TipoExcepción1 // // se se ejecuta ejecuta si si se se produce produce una una excepción excepción de de tipo tipo TipoExcepción1 TipoExcepción1 // }catch( TipoExcepcion2 TipoExcepcion2 ee )) {{ }catch( // gestor de excepciones para TipoExcepción2 // gestor de excepciones para TipoExcepción2 throw(e); (e); // // se se puede puede volver volver aa lanzar lanzar la la excepción excepción propagar propagar throw finally {{ }} finally // bloque de código que se ejecuta siempre, haya o no excepción // bloque de código que se ejecuta siempre, haya o no excepción }}

Excepciones

Excepciones

10

Gestión de excepciones

Sintaxis

Java

Java

11

try { /*...*/} catch (OverflowException e) { /*...*/} catch (MathError e) { /*...*/} catch (Exception e) { /*...*/} finally{ /*...*/} Exception

MathError

OverflowException

Java

Excepciones

12

2

Gestión de excepciones

Gestión de excepciones

finally w Es el bloque de código que se ejecuta siempre, haya o no excepción try { inicioProceso (); gestionProceso(); } finally { finProceso (); } w La única situación en la que la sentencia finally no se ejecuta es si se llama al método System.exit (), que termina la ejecución del programa. Java

Excepciones

w Se puede utilizar para propagar una excepción

tratada parcialmente

Java

Excepciones

14

Propagación de excepciones

Entorno Java Entorno Java EntornoJava Java Entorno (Java runtime) (Java (Javaruntime) runtime) runtime) (Java

Métodomain() main() Método

w Permite lanzar de forma explícita una excepción

13

Propagación de excepciones

Llamadas métodos

throw

fee()

fie() throws X

try

try

{

{

Paso de excepciones

//...

//...

//...

fie();

foe();

throw

//...

Primermétodo método Primer

//...

}

}

catch (X e)

finally

{

{

}

new X(); //...

//...

//...

Segundométodo método Segundo (Excepcióngenerada generadaaquí) aquí) (Excepción Todas las excepciones que se puedan generar se han de manejar o delegar

foe() throws X

}

finally { //...

Java

Excepciones

15

Excepciones

}

Java

Excepciones

16

Ejemplo simple excepciones public class class PruebaExcepciones PruebaExcepciones {{ public

RuntimeExceptions public static static void void main( main(String 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; //división //división por por cero cero valor array[4]= 5; 5; //acceso //acceso aa una una posición posición no no disponible disponible array[4]= } } catch(( ArithmeticException ArithmeticException ee )) {{ catch System.out.println( "Division "Division por por cero" cero" ); ); System.out.println( }} catch(( Exception Exception ee )) {{ catch System.out.println .out.println(( "Se "Se ha ha producido producido un un error" error" ); ); System }} }} }}

ArrayIndexOutOfBoundsExce ption ArithmeticException NullPointerException ClassCastException IllegalArgumentException

No es obligatorio incluir código de tratamiento de este tipo de excepciones n

aunque se puede incluir dicho código Java

Excepciones

17

Java

Excepciones

18

3

Propagación de excepciones

throws

public class class PruebaExcepcion PruebaExcepcion {{ public public static static void void main( main(String String args[]) args[]) {{ public int valor=5, cero=0; int valor=5, cero=0; int[] array array == {1, {1, 2, 2, 3}; 3}; int[] try {{ try try {{ try valor == valor/cero; valor/cero; //división //división por por cero cero valor array[4]= 5; 5; //acceso //acceso aa una una posición posición no no disponible disponible array[4]= }catch( ArithmeticException ArithmeticException ee )) {{ }catch( System.out.println( "Division por cero" ); System.out.println( "Division por cero" ); throw ee;; throw }catch( Exception Exception ee )) {{ }catch( System.out.println( "Se "Se ha ha producido producido un un error" error" ); ); System.out.println( }} }catch(Exception Exception e){ e){ }catch( System.out.println(e.getMessage()); ()); System.out.println(e.getMessage }} } } Java Excepciones 19 }}

Gestión incompleta de excepciones Si un método 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 método */ } Excepciones

public void ejemploExcep () throws IOException

A continuación de la palabra reservada throws aparece una lista de todas las excepciones que se pueden dar dentro del método y no serán gestionadas. Java

Excepciones

20

Gestión incompleta de excepciones

TipoDevuelto nombreMetodo(argumentos) throws listaExcepciones { /* cuerpo del método */ }

Java

Indica que el código producirá una excepción, que no se tratará dentro de él y se pasará al método superior, utilizando la cláusula throws.

import java.i java.io.*; o.*; import public class class PruebaExcepciones PruebaExcepciones {{ public public static char char leer() leer() throws throws IOException IOException {{ public static 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 "Caracter:: "+car); "+car); System.out.println( } catch IOException e) e) {{ } catch ((IOException System.out.println("Error de entrada de datos"); datos"); System.out.println("Error de entrada de }} } }

21

Lanzamiento de excepciones public class class Alumno{ Alumno{ public public Alumno(String Alumno(String nombre, nombre, String String apellidos) apellidos) public throws Exception throws Exception {{ if(nombre == null || apellidos == null) if(nombre == null || apellidos == null) throw new new Exception("Argumentos Exception("Argumentos no no válidos"); válidos"); throw //si el el constructor constructor lanza lanza la la excepción excepción 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 }}

Java

Excepciones

22

Excepciones definidas por el programador El programador puede definir sus propias clases de excepciones n

Se define una clase que herede de Throwable o más normalmente de Exception

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

Excepciones

24

4

Excepciones definidas por el usuario

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

Gestiona la excepción, incluyendo en el código los bloques try-catch-finally Se considera que una excepción está tratada incluso si el bloque catch está vacío. Indica que el código producirá una excepción, que no se tratará dentro de él y se pasará al método superior, utilizando la cláusula throws.

25

Excepciones definidas por el usuario

Java

Excepciones

26

Ejemplo excepción definida por el usuario

public void ejemploExcep () throws IOException A continuación de la palabra reservada throws aparece una lista de todas las excepciones que se pueden dar dentro del método y no serán gestionadas.

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 excepción"); e.printStackTrace(); System.out.println(e.getMessage()); } EdadFueraDeRangoException: Demasiado joven o demasiado viejo at Persona.ponEdad at Persona.m a i n

Java

Excepciones

27

Ejemplo

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

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 aviable");} }.... Java Excepciones 30

5

Excepciones más frecuentes

Excepciones más frecuentes

ArithmeticException int i = 12 / 0; NullPointerException Date d = null; System.out.println (d.toString()); NegativeArraySizeException Intento de creación de un vector con un número negativo de elementos Java

Excepciones

ArrayIndexOutOfSizeException Intento de acceso a un elemento de un vector fuera de rango SecurityException Error de seguridad en los navegadores.

31

Sobreescritura de métodos public void test() throws ExceptionA

Java

Excepciones

32

Sobreescritura de métodos ExceptionA

Exception

public void test() throws ExceptionA

extends

sobre escribe

extends

public void test() throws ExceptionB

Java

Excepciones

sobre escribe

ExceptionB

33

public void test() throws ExceptionC

Java

ExceptionA

Excepciones

ExceptionC

34

6