Download - Manejo de Excepciones
-
Docente: Jos Souza Ordenes
-
Qu es una excepcin?
Las excepciones son las formas en que los programas de Java manejan los diferentes errores que pueden ocurrir. Puede pensarse en una excepcin como en un error.
Cuando una excepcin ocurre decimos que fue lanzada, y cuando manejamos dicha excepcin, es decir hacemos algo al respecto del error, decimos que fue capturada
Ejemplos de excepciones son:
Tratar de convertir la cadena 123A4 a nmero
Tratar de llamar a un mtodo no esttico de una referencia null
2
-
Qu es una excepcin? Para capturar excepciones en un bloque de cdigo susceptible debemos
usar usar un bloque try..catch, que radica en un bloque de instrucciones en el que se capturarn las excepciones (bloque try), y uno o ms bloques de manejo de excepciones (bloques catch)
Por ejemplo:
3
try {
// sentencias a monitorear el error
}
catch (tipoexcepcion nombrevar) {
// sentencias de manejo de la excepcin
}
finally {
//sentencias a ejecutar ocurran o no excepciones
}
Una o ms
Opcional
-
Qu es una excepcin? Por ejemplo:
4
try {
int i = Integer.parseInt(123A4);
} catch (NumberFormatException nfe) {
System.out.println(El formato del nmero es erroneo);
}
-
Ejemplo prctico
Este cdigo pedira al usuario un nmero, en el caso de que el nmero sea vlido, el programa imprime el primer mensaje.
Si el nmero es invlido, el segundo mensaje es mostrado.
Y si el usuario cierra el cuadro de dialogo (caso en el cual showInputDialog retorna null), entonces el tercer mensaje sera mostrado.
5
try {
String input = JOptionPane.showInputDialog(Digite un +
nmero:);
int i = Integer.parseInt(input);
System.out.println(El nmero es +i);
} catch (NumberFormatException nfe) {
System.out.println(El formato del nmero es erroneo);
} catch (NullPointerException npe) {
System.out.println(Usted no ha digitado ningn nmero);
}
-
Excepciones no tratadas Cuando en un programa se arroja una excepcin y esta no
es capturada, la excpecin supera los lmites del programa y es capturada por la JVM, mostrando un mensaje parecido a este:
Exception in thread "main
java.lang.NullPointerException
at MiClase.main(MiClase.java:17)
6
-
Cmo arrojar una excepcin? En ocasiones no solo debemos capturar excepciones
predefinidas, sino que debemos crear nuestras propias excepciones y arrojarlas.
Para arrojar una excepcin debe usarse la palabra reservada throw, que funciona se usa as:
7
if (elNumeroNoMeGust)
throw new NumberFormatException()
En el ejemplo estamos arrojamos una de las excepciones
predefinidas que es usada para informar de errores en el
formato de conversiones de String a nmero.
-
Tipos de excepciones Pueden distinguirse dos tipos de excepciones:
Runtime Exceptions: Son excepciones que se producen en el sistema de ejecucin de Java. Tal como usar referencias null, hacer una dividisin entre cero, acceder a un elemento inexistente en un array.
NonRuntime Exceptions: Son excepciones que se producen fuera del sistema de ejecucin de Java. Son ejemplo de estas las excepciones que se producen por acceso a archivos (IOExceptions)
En el segundo tipo de excepciones el compilador se asegura de que el programador maneje la excepcin (es decir, que cree un bloque trycatch)
8
-
Tipos de excepciones La manera de distinguir ambos tipos de excepciones es mediante
la clase de las que estas extienden (si, todas las excepciones son clases).
Las excepciones del tipo Runtime deben extender de la clase RuntimeException, mientras lsas de tiopo NonRuntime deben extender de Exception.
9
-
Excepciones comunes
IOException Generalmente fallas de entrada o salida, tal como la inhabilidad de leer desde un archivo.
NullPointerException: Referencia a un objeto NULL
NumberFormatException: Una conversin fallida entre Strings y nmeros
OutOfMemoryException: Muy poca memoria para instanciar un objeto nuevo (new)
10
-
Excepciones comunes SecurityException: Un applet tratando de realizar una accin
no permitida por la configuracin de seguridad del browser
StackOverflowException: El sistema corriendo fuera de
espacio en Stack (stack space)
11
-
Errores Adems de las excepciones, en Java existen los Errores, clases parecidas
a las excepciones, pero su objetivo es informar de una situacin anormal grave, algo as como situaciones que nunca debieron ocurrir.
Son ejemplos de errores las clases: ThreadDeath
VirtualMachineError
AssertionError
Debido a que los Errores son inesperados, el compilador no exige al compilador que los capture.
Todos los Errores deben extender de la clase Error
12
-
Excepciones NonRuntime Si tratramos de compilar una clase que tuviera el siguiente
mtodo:
13
El compilador nos dara este error
public boolean abreArchivo() {
new FileInputStream(archivo.txt);
return true;
}
unreported exception java.io.FileNotFoundException;
must be caught or declared to be thrown
Debido a que no estamos capturando la excepcin
FileNotFoundException que puede ser lanzada
-
Excepciones NonRuntime Para librarnos del problema tenemos dos opciones:
Capturar la excepcin:
14
public boolean abreArchivo() {
try {
new FileInputStream(archivo.txt);
return true;
} catch (IOException ioe) {
return false;
}
}
O indicar en la declaracin del mtodo, que la excepcin
puede ser lanzada:
public boolean abreArchivo() throws IOException {
new FileInputStream(archivo.txt);
return true;
}
-
Arrojando Excepciones Para arrojar una excepcin debemos usar la palabra throw
seguida de un objeto del tipo Excepcin (o Error)
Esto es til cuando queremos informar al programa invocador que ocurri una situacin anmala en nuestro cdigo
Por ejemplo:
15
public boolean debitarCuenta (int valor)
throws InvalidAmountException {
if (balance+sobregiro+sobrecanje < valor)
throw new InvalidAmountException()
}
-
Creacin de Excepciones
Podemos crear una excepcin tan solo creando una clase que extienda de otra excepcin ya existente:
16
public class InvalidAmountException extends RuntimeException {}
public class InvalidAmountException extends Exception {}
Y como es una clase, podemos colocar cualquier mtodo y
atributo que se nos ocurra:
public class InvalidAmountException extends RuntimeException
{
protected int valorInvalido;
public InvalidAmountException(int valorInvalido) {
this.valorInvalido = valorInvalido;
}
public int getValorInvalido() {
return valorInvalido;
}
}
-
Excepciones comunes
ArithmeticException: Errores Matemticos, como divisin por cero.
ArrayIndexOutOfBoundsException: Un programa tratando de almacenar, el tipo de ndice errneo, de datos en un arreglo.
FileNotFoundException: Un intento de acceder a un archivo que no existe.
IOException: Fallas de entrada/salida, tal como la inhabilidad de leer desde un archivo.
17
-
Excepciones comunes NullPointerException: Referencia a un objeto NULL
NumberFormatException: Una conversin fallida entre Strings y nmeros
OutOfMemoryException: Muy poca memoria para instanciar un objeto nuevo (new)
SecurityException: Un applet tratando de realizar una accin no permitida por la configuracin de seguridad del browser
18
-
Excepciones comunes StackOverflowException: El sistema corriendo fuera de
espacio en Stack (stack space)
19
-
Ejercicios, aplicando Excepciones.
20
-
import java.io.*;
public class Calculadora {
public static void main(String[] args) {
double op1=0, op2=0, total=0;
String op="";
BufferedReader entrada
= new BufferedReader(new InputStreamReader(System.in));
while ( true ) {
try {
System.out.println( "\nTeclee operacin (+,-,*,/),
Z para terminar: " );
op = entrada.readLine().toUpperCase();
if (!op.equals("+") && !op.equals("-")
&& !op.equals("*") && !op.equals("/")
&& !op.equals("Z")) throw new OpMal();
21
Calculadora simple
-
if (op.equals("Z")) return;
System.out.println( "\nTeclee operando 1: " );
op1 = Double.parseDouble(entrada.readLine());
System.out.println( "\nTeclee operando 2: " );
op2 = Double.parseDouble(entrada.readLine());
if (op.equals("+")) total = op1+op2;
if (op.equals("-")) total = op1-op2;
if (op.equals("*")) total = op1*op2;
if (op.equals("/")) total = op1/op2;
System.out.println( "\nEl resultado de "+op1+op+op2
+" es: "+total );
22
-
} catch (OpMal om) {
System.out.println( "\n" + om.getMessage() );
} catch( NumberFormatException nfe ) {
System.out.println("\nError de formato numrico: "
+ nfe.toString());
} catch ( ArithmeticException ae ) {
System.out.println("\nError aritmtico: " + ae.toString());
} catch( IOException ioe ) {
System.out.println( "\nError de entrada/salida: "
+ ioe.toString() );
} catch( Exception e ) {
// Captura cualquier otra excepcin
System.out.println( e.toString() );
e.printStackTrace();
}
}
}
}
23
-
Control de ingreso de datos numrico
24
-
package excepcionconreanudacion; /** * */ // Defina un comportamiento de tipo reanudacin utilizando un bucle while que se repita hasta que se deje de generar una excepcin. import java.io.*; public class ExcepcionconReanudacion { public static void main(String[] args) { boolean continuar = true; while(continuar) {
25
-
try {
System.out.print("Introduce un nmero entero: ");
InputStreamReader datosInsertados = new InputStreamReader(System.in);
BufferedReader datos = new BufferedReader(datosInsertados);
String cadenaDatos = datos.readLine();
int numero = Integer.parseInt(cadenaDatos);
int cuadrado = numero * numero;
System.out.println("El cuadrado de " + numero + " = " + cuadrado);
continuar = false;
26
-
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
}
lass OpMal extends Exception {
public OpMal() {
super( "Excepcin: OPERACIN INCORRECTA." );
}
}
27