excepciones - lsublsub.org/ist/2.excepciones.pdf · excepciones • gestión de errores para casos...

Post on 18-Aug-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ExcepcionesLSUB, GSYC, URJC

1Monday, February 4, 13

Excepciones

• Gestión de errores para casos excepcionales

• Parte del interfaz de una clase

• Clases en sí mismas

2Monday, February 4, 13

Excepciones

main

f()

g()

Pila

g()

maneja excepciones

3Monday, February 4, 13

Excepciones

main

f()

g()

Pila

g()

manejador excepciones

Excepción

4Monday, February 4, 13

Excepciones

• El manejador puede

• Elevar una nueva excepción

• Continuar normalmente

5Monday, February 4, 13

Excepcionespublic class Main { public static void hazOtraCosa() { throw new RuntimeException("Bang!"); } public static void hazAlgo() { try { hazOtraCosa(); System.out.println("otra cosa hecha"); }catch(Exception e) { System.err.println("Oops: " + e); } } public static void main(String args[]) { hazAlgo(); System.out.println("algo hecho"); }}

6Monday, February 4, 13

Excepciones

Oops: java.lang.RuntimeException: Bang!algo hecho

7Monday, February 4, 13

Excepcionespublic class Main { public static void hazOtraCosa() { throw new RuntimeException("Bang!"); } public static void hazAlgo() { try { hazOtraCosa(); System.out.println("otra cosa hecha"); }catch(RuntimeException e) { System.err.println("Oops: " + e); throw e; } } public static void main(String args[]) { hazAlgo(); System.out.println("algo hecho"); }}

8Monday, February 4, 13

Excepciones

Oops: java.lang.RuntimeException: Bang!Exception in thread "main" java.lang.RuntimeException: Bang! at ex.Main.hazOtraCosa(Main.java:6) at ex.Main.hazAlgo(Main.java:11) at ex.Main.main(Main.java:20)

9Monday, February 4, 13

Excepciones en Java

• Tres tipos:

• Exception: cualquier situación excepcional en nuestro programa de la que nos podamos recuperar.

• Error: errores en el sistema (e.g. IO error).

• RuntimeException: situaciones internas al programa de las que puede que no nos podamos recuperar (e.g. un bug).

10Monday, February 4, 13

Excepciones en Java

•Todas derivan de Throwable

•Pero vamos a considerarlas todas excepciones

Throwable

Exception Error

RuntimeException

11Monday, February 4, 13

Excepciones

class HazException extends Exception { HazException(String s){ super(s); }};

12Monday, February 4, 13

Excepciones public static void hazOtraCosa() throws HazException { throw new HazException("Bang!"); } public static void hazAlgo() { try { hazOtraCosa(); System.out.println("otra cosa hecha"); }catch(RuntimeException e) { System.err.println("RT: " + e); }catch(Error e) { System.err.println("Err: " + e); }catch(HazException e) { System.err.println("Haz ex:" + e); } }

13Monday, February 4, 13

Excepciones

algo hechoHaz ex:ex.HazException: Bang!

14Monday, February 4, 13

Excepciones en JavaException:

• La excepción forma parte de la interfaz pública del método: los métodos tienen que especificar las excepciones que pueden levantar (throws)

• El compilador obliga a manejar la excepción

• Se denominan “checked exceptions”

Error y RuntimeException:

• El compilador no obliga a manejar estas excepciones (aunque las podemos/debemos manejar)

• No forman parte de la interfaz pública del método que las puede provocar

• Se denominan “unchecked exceptions”

15Monday, February 4, 13

Excepciones

• RuntimeException:

• Arithmetic Exception

• NullPointer Exception

• IndexOutOfBounds Exception

• ...

16Monday, February 4, 13

Excepciones

• Error:

• IOError

• AssertionError

• ...

Nota: deriva de Throwable, no de Exception.

17Monday, February 4, 13

Excepciones

• Podemos imprimir la pila

• Y podemos ejecutar código incondicionalmente tengamos excepciones o no (finally).

18Monday, February 4, 13

Excepciones InputStream s = null; try { s = new FileInputStream("README"); }catch(FileNotFoundException e) { e.printStackTrace(); System.exit(1); }

try { int b = s.read(); }catch(IOException e) { System.err.println("couldn't read: " + e); }finally { s.close(); }

19Monday, February 4, 13

Excepciones

• O podemos usar recursos cuyo ámbito es un try....

20Monday, February 4, 13

Excepciones

try(InputStream s = new FileInputStream("README")) { int b = s.read(); }

• Se llama a s.close() al final

• Suframos excepciones o no

• Ha de implementar AutoCloseable

• Disponible a partir de Java SE 7

21Monday, February 4, 13

top related