Download Transparencias de excepciones en java

Document related concepts
no text concepts found
Transcript
Excepciones
LSUB, GSYC, URJC
Monday, February 4, 13
1
Excepciones
• Gestión de errores para casos
excepcionales
• Parte del interfaz de una clase
• Clases en sí mismas
Monday, February 4, 13
2
Excepciones
g()
g()
f()
maneja
excepciones
main
Pila
Monday, February 4, 13
3
Excepciones
g()
Excepción
g()
f()
manejador
excepciones
main
Pila
Monday, February 4, 13
4
Excepciones
• El manejador puede
• Elevar una nueva excepción
• Continuar normalmente
Monday, February 4, 13
5
Excepciones
public 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");
}
}
Monday, February 4, 13
6
Excepciones
Oops: java.lang.RuntimeException: Bang!
algo hecho
Monday, February 4, 13
7
Excepciones
public 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");
}
}
Monday, February 4, 13
8
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)
Monday, February 4, 13
9
Excepciones en Java
•
Monday, February 4, 13
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).
10
Excepciones en Java
•Todas derivan de Throwable
•Pero vamos a considerarlas todas excepciones
Throwable
Exception
Error
RuntimeException
Monday, February 4, 13
11
Excepciones
class HazException extends Exception {
HazException(String s){
super(s);
}
};
Monday, February 4, 13
12
Excepciones
Monday, February 4, 13
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);
}
}
13
Excepciones
algo hecho
Haz ex:ex.HazException: Bang!
Monday, February 4, 13
14
Excepciones en Java
Exception:
•
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
Monday, February 4, 13
Se denominan “unchecked exceptions”
15
Excepciones
• RuntimeException:
• Arithmetic Exception
• NullPointer Exception
• IndexOutOfBounds Exception
• ...
Monday, February 4, 13
16
Excepciones
• Error:
• IOError
• AssertionError
• ...
Nota: deriva de Throwable, no de Exception.
Monday, February 4, 13
17
Excepciones
• Podemos imprimir la pila
• Y podemos ejecutar código incondicionalmente
tengamos excepciones o no (finally).
Monday, February 4, 13
18
Excepciones
Monday, February 4, 13
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();
}
19
Excepciones
• O podemos usar recursos cuyo ámbito
es un try....
Monday, February 4, 13
20
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
Monday, February 4, 13
21