Excepciones y E/S
Java y Servicios Web I
Master en Ingeniería Matemática
Manuel Montenegro
Dpto. Sistemas Informáticos y Computación
Desp. 467 (Mat)
[email protected]
Contenidos
● Generación de excepciones.
● Captura de excepciones.
● Generación de excepciones.
● Excepciones definidas por el programador.
● Bloques try/catch/finally.
● Entrada/Salida en Java.
● Serialización.
17/Mayo/2012
6. Excepciones y E/S
2
Excepciones
● Una excepción es una situación anómala que ocurre
en tiempo de ejecución.
● Intentar abrir un archivo que no existe.
● Intentar crear un archivo sin que haya espacio suficiente
en el disco.
● Intentar leer un número del teclado, cuando el usuario
ha introducido algo que no es un número.
● Intento de acceder a un array más allá de sus límites.
● etc.
● Java permite al programador tomar el control del
programa en presencia de estas situaciones
anómalas
→ capturar una excepción.
17/Mayo/2012
6. Excepciones y E/S
3
Generación de excepciones
public class TestException
{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Introduce un número: ");
int a = sc.nextInt();
System.out.println("El número que has introducido es " + a);
}
}
17/Mayo/2012
6. Excepciones y E/S
4
Generación de excepciones
main
llama a
nextInt
llama a
nextInt
llama a
next
llama a
throwFor
● throwFor detectó una situación anómala y
decidió reportarlo a next mediante el
lanzamiento de una excepción.
17/Mayo/2012
6. Excepciones y E/S
5
Generación de excepciones
main
llama a
nextInt
llama a
nextInt
llama a
next
llama a
throwFor
● Cuando throwFor lanza una excepción, su
ejecución se interrumpe y vuelve al método
que llamó a throwFor (es decir, next).
● En la función next no se captura la excepción.
17/Mayo/2012
6. Excepciones y E/S
6
Generación de excepciones
main
llama a
nextInt
llama a
nextInt
llama a
next
llama a
throwFor
● Como en next no se captura la excepción, la
ejecución de next se interrumpe y la ejecución
vuelve a nextInt.
17/Mayo/2012
6. Excepciones y E/S
7
Generación de excepciones
main
llama a
nextInt
llama a
nextInt
llama a
next
llama a
throwFor
● En nextInt tampoco se captura la excepción, y
la ejecución vuelve al llamante.
17/Mayo/2012
6. Excepciones y E/S
8
Generación de excepciones
main
llama a
nextInt
llama a
nextInt
llama a
next
llama a
throwFor
● La ejecución vuelve a nuestro método main.
Como nosotros no capturamos la excepción,
ésta se eleva hacia la máquina virtual de Java,
que fue la encargada de ejecutar main.
17/Mayo/2012
6. Excepciones y E/S
9
Generación de excepciones
main
llama a
nextInt
llama a
nextInt
llama a
next
llama a
throwFor
● La máquina virtual de Java, al recibir una
excepción, aborta la ejecución del programa, y
muestra por pantalla el siguiente mensaje de
error:
stack trace
17/Mayo/2012
6. Excepciones y E/S
10
Clases de excepciones
● El mensaje de error generado por la JVM no
sólo muestra la secuencia de llamadas en las
que se produce la excepción.
● También muestra el tipo de excepción que se
ha generado.
17/Mayo/2012
6. Excepciones y E/S
11
Clases de excepciones
17/Mayo/2012
6. Excepciones y E/S
12
Clases de excepciones
● Las excepciones en Java son objetos.
● La información mostrada por la JVM es la clase
a la que pertenece la excepción lanzada.
● Las excepciones poseen métodos que
proporcionan información sobre el error
producido.
● Esta información depende del tipo de error.
17/Mayo/2012
6. Excepciones y E/S
13
Contenidos
● Generación de excepciones.
● Captura de excepciones.
● Generación de excepciones.
● Excepciones definidas por el programador.
● Bloques try/catch/finally.
● Entrada/Salida en Java.
● Serialización.
17/Mayo/2012
6. Excepciones y E/S
14
Captura de excepciones
● Una excepción puede capturarse mediante la
construcción try-catch.
public class TestException {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
System.out.print("Introduce un número: ");
int a = sc.nextInt();
System.out.println("El número que has introducido es " + a);
} catch (InputMismatchException e) {
System.out.println(“La cadena introducida no es un número.”);
System.out.println(e.getMessage());
}
}
}
17/Mayo/2012
6. Excepciones y E/S
15
Captura de excepciones
● Dentro del bloque try se coloca el código que
es susceptible de generar una excepción.
public class TestException {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
System.out.print("Introduce un número: ");
int a = sc.nextInt();
System.out.println("El número que has introducido es " + a);
} catch (InputMismatchException e) {
System.out.println(“La cadena introducida no es un número.”);
System.out.println(e.getMessage());
}
}
}
17/Mayo/2012
6. Excepciones y E/S
16
Captura de excepciones
● Si el código dentro del bloque try produce una excepción, se abandona
dicho bloque y se comprueba si la clase de la misma se corresponde con (o
es subclase de) la clase indicada tras el catch.
public class TestException {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
System.out.print("Introduce un número: ");
int a = sc.nextInt();
System.out.println("El número que has introducido es " + a);
} catch (InputMismatchException e) {
System.out.println(“La cadena introducida no es un número.”);
System.out.println(e.getMessage());
}
}
}
17/Mayo/2012
6. Excepciones y E/S
17
Captura de excepciones
● Si la excepción es compatible con el tipo indicado tras el catch, se
ejecutará el bloque correspondiente.
● Además, la variable indicada tras el tipo contendrá el objeto que
representa la excepción lanzada.
public class TestException {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
System.out.print("Introduce un número: ");
int a = sc.nextInt();
System.out.println("El número que has introducido es " + a);
} catch (InputMismatchException e) {
System.out.println(“La cadena introducida no es un número.”);
System.out.println(e.getMessage());
}
}
}
17/Mayo/2012
6. Excepciones y E/S
18
Captura de excepciones
● Si la excepción no es compatible con el tipo
indicado tras el catch, se volverá a lanzar al
nivel superior (la JVM).
17/Mayo/2012
6. Excepciones y E/S
19
Captura de excepciones
● Es posible tener varias sentencias catch en un
mismo bloque try, con el fin de capturar
distintos tipos de excepciones.
Scanner sc = new Scanner(System.in);
try {
System.out.print("Introduce un número: ");
int a = sc.nextInt();
System.out.println("El número que has introducido es " + a);
} catch (InputMismatchException e) {
System.out.println(“La cadena introducida no es un número.”);
System.out.println(e.getMessage());
} catch (NoSuchElementException e) {
System.out.println(“No hay más caracteres en la entrada.”);
System.out.println(e.getMessage());
}
17/Mayo/2012
6. Excepciones y E/S
20
Jerarquía de excepciones
Throwable
Exception
Error
IOException
RuntimeException
NullPointerException
IndexOutOfBoundsException
NoSuchElementException
InputMismatchException
17/Mayo/2012
6. Excepciones y E/S
21
Jerarquía de excepciones
Scanner sc = new Scanner(System.in);
try {
System.out.print("Introduce un número: ");
int a = sc.nextInt();
System.out.println("El número que has introducido es " + a);
} catch (InputMismatchException e) {
System.out.println(“La cadena introducida no es un número.”);
System.out.println(e.getMessage());
} catch (NoSuchElementException e) {
System.out.println(“No hay más caracteres en la entrada.”);
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
}
17/Mayo/2012
6. Excepciones y E/S
22
Contenidos
● Generación de excepciones.
● Captura de excepciones.
● Generación de excepciones.
● Excepciones definidas por el programador.
● Bloques try/catch/finally.
● Entrada/Salida en Java.
● Serialización.
17/Mayo/2012
6. Excepciones y E/S
23
Generar una excepción
public class Estudiante extends Persona {
private int puntuacionTotal;
private int numeroCalificaciones;
…
public double getNotaMedia() {
return ((double) puntuacionTotal)/numeroCalificaciones;
}
}
¿Y si numeroCalificaciones = 0?
● Para generar una excepción, hay que:
● Crear el objeto que contenga la excepción (de alguna subclase de
Exception).
● Lanzar dicho objeto al llamante mediante throw.
17/Mayo/2012
6. Excepciones y E/S
24
Generar una excepción
public class Estudiante extends Persona {
public double getNotaMedia() throws Exception {
if (numeroCalificaciones == 0)
throw new Exception(“No hay calificaciones”);
return ((double) puntuacionTotal)/numeroCalificaciones;
}
}
Estudiante est = new Estudiante(“David Sánchez”, new Fecha(10, 3, 2002), 23155512);
int notaMedia = 0;
try {
notaMedia = est.getNotaMedia();
} catch (Exception e) {
System.out.println(e.getMessage());
}
17/Mayo/2012
6. Excepciones y E/S
25
Contenidos
● Generación de excepciones.
● Captura de excepciones.
● Generación de excepciones.
● Excepciones definidas por el programador.
● Bloques try/catch/finally.
● Entrada/Salida en Java.
●
Comentarios de: ExcepcionesES - Java y Servicios Web I - Master en Ingeniería Matemática (0)
No hay comentarios