Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Definicin
Una excepcin que no fue capturada correctamente hace que el sistema se
caiga. Una excepcin es un evento que ocurre durante la ejecucin de un programa, que
interrumpe el flujo normal de ejecucin.
Java usa excepciones para el manejo de errores, error handling. Es un sinnimo
de eventos excepcionales. Un buen manejo de Excepciones hace a un sistema robusto y
estable, confiable.
Tipos de Excepciones
-Excepciones No Chequeadas (Unchecked Exceptions)
Son las excepciones que tienen como superclase a la clase RuntimeException.
No hay necesidad de capturarlas, es decir que no se necesita utilizar el bloque try/catch,
pero al saltar uan excepcin de este tipo, como todas las excepciones corta el flujo de la
ejecucin.
Pueden ser difciles de detectar, pero finalmente hacen que el sistema se caiga
si no fueron tomadas en cuenta.
Ejemplo:
Cuando se realiza una divisin por cero se lanza automticamente una
ArithmeticException. Cuando se quiere acceder a un objeto que apunta a null se lanza
automticamente una NullPointerException. Cuando se quiere acceder a un array con un
La sentencia throw
La sentencia throw se usa para lanzar excepciones. Requiere un nico argumento, una
instancia de la clase java.lang.Throwable, que es implementada por la clase Exception y
errores.
Ejemplo:
boolean hayError = true;
if(hayError) {
throw new Exception();
}
Esto significa que despus de evaluar la clausula hayError y al ver que es verdadero,
significa que debe cortarse el flujo de corrida del programa, y desde el mtodo que llama
a este mtodo debe capturarse este error con un bloque try/catch, e informar al usuario
que ocurri el error y luego restablecer el sistema.
La keyword Throws
La palabra clave throws se utiliza en la firma de los mtodos que pueden lanzar
excepciones. Una buena combinacin de Creacin de Excepciones propias del negocio
que estamos modelando con el sistema, y la declaracin en los mtodos indicados que
pueden lanzar este tipo de excepciones, hace que sea fcil programar y compartir clases
entre distintos equipos de desarrollo.
Estas practicas facilitan mucho el compartir cdigo y queda uno siempre obligado a
capturar excepciones que permiten un buen control del flujo de datos dentro del sistema,
y lo hacen robusto.
Ejemplo:
public class Hombre{
public void comer () throws MiExcepcion{
//Ac va algo de cdigo.
//Ac debemos evaluar una condicin que hace que arrojemos una
excepcin.
throw new MiExcepcion();
}
}
Ejemplo Completo de todo lo anterior
class NumeroNegativoException extends Exception {
NumeroNegativoException(){
super("El numero debe ser mayor o igual que 0");
}
}
static long Factorial(int n) throws NumeroNegativoException{
if(n<=0) throw new NumeroNegativoException();
int f=1;
for(int i=1;i<=n;i++) f*=i;
return f;
}
public static void main(String args[]){
int i;
BufferedReader entrada = new BufferedReader(
new InputStreamReader(System.in));
String s = new String();
try{
s=entrada.readLine();
//Convertir la entrada en entero
i = Integer.parseInt(s);
System.out.println("Factorial de " + i + ": " + Factorial(i));
} catch(NumeroNegativoException nne){
//Mostrara "El numero debe ser mayor o igual que 0"
System.err.println(nne.getMessage());
} catch(IOException ioe){
System.err.println("Se ha producido un error en la entrada de datos");
} catch(NumberFormatException nfe){
//Se lanza cuando la cadena s no se puede convertir a entero
System.err.println("Formato erroneo");
}catch(Exception e){
System.err.println("Se ha producido un error");
}
}
}