![Page 1: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/1.jpg)
ExcepcionesLSUB, GSYC, URJC
1Monday, February 4, 13
![Page 2: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/2.jpg)
Excepciones
• Gestión de errores para casos excepcionales
• Parte del interfaz de una clase
• Clases en sí mismas
2Monday, February 4, 13
![Page 3: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/3.jpg)
Excepciones
main
f()
g()
Pila
g()
maneja excepciones
3Monday, February 4, 13
![Page 4: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/4.jpg)
Excepciones
main
f()
g()
Pila
g()
manejador excepciones
Excepción
4Monday, February 4, 13
![Page 5: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/5.jpg)
Excepciones
• El manejador puede
• Elevar una nueva excepción
• Continuar normalmente
5Monday, February 4, 13
![Page 6: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/6.jpg)
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
![Page 7: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/7.jpg)
Excepciones
Oops: java.lang.RuntimeException: Bang!algo hecho
7Monday, February 4, 13
![Page 8: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/8.jpg)
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
![Page 9: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/9.jpg)
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
![Page 10: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/10.jpg)
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
![Page 11: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/11.jpg)
Excepciones en Java
•Todas derivan de Throwable
•Pero vamos a considerarlas todas excepciones
Throwable
Exception Error
RuntimeException
11Monday, February 4, 13
![Page 12: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/12.jpg)
Excepciones
class HazException extends Exception { HazException(String s){ super(s); }};
12Monday, February 4, 13
![Page 13: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/13.jpg)
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
![Page 14: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/14.jpg)
Excepciones
algo hechoHaz ex:ex.HazException: Bang!
14Monday, February 4, 13
![Page 15: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/15.jpg)
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
![Page 16: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/16.jpg)
Excepciones
• RuntimeException:
• Arithmetic Exception
• NullPointer Exception
• IndexOutOfBounds Exception
• ...
16Monday, February 4, 13
![Page 17: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/17.jpg)
Excepciones
• Error:
• IOError
• AssertionError
• ...
Nota: deriva de Throwable, no de Exception.
17Monday, February 4, 13
![Page 18: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/18.jpg)
Excepciones
• Podemos imprimir la pila
• Y podemos ejecutar código incondicionalmente tengamos excepciones o no (finally).
18Monday, February 4, 13
![Page 19: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/19.jpg)
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
![Page 20: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/20.jpg)
Excepciones
• O podemos usar recursos cuyo ámbito es un try....
20Monday, February 4, 13
![Page 21: Excepciones - LSUBlsub.org/ist/2.excepciones.pdf · Excepciones • Gestión de errores para casos excepcionales • Parte del interfaz de una clase • Clases en sí mismas Monday,](https://reader035.vdocuments.co/reader035/viewer/2022071005/5fc234ef334a644582535aa3/html5/thumbnails/21.jpg)
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