Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
catch(tipo3_de_excepcin e)
{
Instrucciones a ejecutar cuando ocurre una excepcin de tipo 3.
}
ArithmeticException
ArrayStoreException
NegativeArraySizeException
NullPointerException
SecurityException
EOFException
IOException
FileNotFoundException
No encuentra el fichero
NumberFormatException
Solucin.
Como vemos, el ltimo catch tiene el valor Exception que es genrico para
cuando se produce un error. Puedes probar a poner entre comentarios las dos
anteriores a sta, la del formato numrico y la de la operacin aritmtica y
comprobar cmo entonces se entrara por esta ltima captura general. Tambin
vemos, que lo que hay en finally siempre se ejecuta haya o no haya errores.
La filosofa de Java es del tipo interrupcin, pero se puede intentar emular
la reanudacin encerrando el bloque try en un while que se repetir hasta que el
error deje de existir. Ejemplo:
boolean indiceNoValido=true;
int i; //Entero que tomar nos aleatorios de 0 a 9
String texto[]={Uno,Dos,Tres,Cuatro,Cinco};
while(indiceNoValido){
try{
i=Math.round(Math.random()*9);
System.out.println(texto[i]);
indiceNoValido=false;
}catch(ArrayIndexOutOfBoundsException exc){
System.out.println(Fallo en el ndice);
}
}
En el cdigo anterior, el ndice i calcula un nmero del 0 al 9 y con ese
nmero el cdigo accede al array texto que slo contiene 5 elementos. Esto
producir muy a menudo una excepcin del tipo ArrayIndexOutOfBoundsException
que es manejada por el catch correspondiente. Normalmente no se continuara
intentando. Pero como tras el bloque catch est dentro del while, se har otro
intento y as hasta que no haya excepcin, lo que provocar que indiceNovalido
valga true y la salida, al fin, del while.
Se puede utilizar una serie de mtodos comunes a todas las clases de
excepciones:
1.-String getMessage(). Obtiene el mensaje descriptivo de la excepcin o una
indicacin especfica del error ocurrido:
try{
....
} catch (IOException ioe){
System.out.println(ioe.getMessage());
}
+num1/num2);
}
catch (Exception excep){
System.out.println(excep.getMessage());
excep.printStackTrace();
error=true;
}
finally {
teclado.nextLine(); //limpio buffer teclado
}
}while (error);
}//fin main
}// finclass
Otra forma:
import java.util.Scanner;
public class ejemploexcepcion {
public static void main(String[] args) {
Scanner teclado=new Scanner(System.in);
int num1,num2;
boolean error=false;
do {
try{
error=false;
System.out.print("Ingrese primer valor:");
num1=teclado.nextInt();
System.out.print("Ingresesegundo valor");
num2=teclado.nextInt();
System.out.println("La divisin " + num1 +"/" +num2 + "= " +num1/num2);
}
catch (Exception excep){
System.out.println("division por cero");
error=true;
}
finally {
teclado.nextLine(); //limpio buffer teclado
}
}while (error);
}//fin main
}// finclass
Ahora vamos a ver cmo podemos capturar de forma selectiva con varios
bloques catch.
Import java.util.*;
Public class Excepcion2 {
/**
* @paramargs
*/
Public static void main(String[] args) {
Scanner teclado = newScanner(System.in);
boolean error=false;
do {
try {
int num2=Integer.parseInt(texto);
System.out.println("La divisin " + num1 +"/" +num2 + "= "
+num1/num2);
}
catch (NumberFormatExceptionexcep){
System.out.println("Error en la conversin");
error=true;
}
catch (ArithmeticExceptionexcep){
System.out.println("Divisin por cero");
error=true;
}
catch (Exception excep){
System.out.println("Excepcin desconocida");
error=true;
}
finally {
teclado.nextLine(); //limpio buffer teclado
}
}while (error);
}//fin main
}//fin class
La sentencia throw permite al programador generar excepciones especficas
para la lgica de sus aplicaciones. La clase Persona muestra como el mtodo
ponEdad genera una excepcin cuando la edad es menor que cero o mayor de cien.
Cuando se genera la excepcin no se ejecuta la sentencia siguiente ya que el
mtodo termina con la generacin de la excepcin.
Public class Persona {
private int edad;
public void ponEdad(int edadNueva)throws Exception{
if (edadNueva< 0 || edadNueva> 100)
throw (newException ("Edad no vlida"));
edad=edadNueva;
}
public String toString(){
return"Edad: " + edad;
}
}
Import java.util.*;
Public class VerPersona {
Public static void main(String[] args) {
boolean error;
Scanner teclado = new Scanner(System.in);
Persona p = new Persona();
do {
error=false;
System.out.print("Introduce la edad: ");
try{
int edad = teclado.nextInt();
p.ponEdad(edad);
System.out.println(p.toString());
}
catch (Exception e){
error=true;
System.out.println(e.getMessage());
}
finally {
teclado.nextLine();
}
} while (error);
} // finmain
}// finclass
Ejercicios Propuestos (Por supuesto que se pueden hacer sin Excepciones,
pero...)
Resultado de la ejecucin:
2.- Realizar un ejercicio que pide al usuario una frase. Despus le pedir la posicin del
carcter que quiere visualizar y mostrar el pantalla el carcter de la frase tecleada que
se encuentra en esa posicin. Si la posicin no es vlida deber mostrar un mensaje
indicndolo. El programa terminar cuando el usuario introduzca la posicin 0.
Resultado de la ejecucin