Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Manejo de
Excepciones
Alumnos:
Errores de Sintaxis:...................................................................................... 11
Errores de Ejecucin:................................................................................... 12
Errores de Lgica:........................................................................................ 12
Conclusin......................................................................................................... 13
Introduccin
Como se sabe, los programas algunas veces generan errores. Los errores de
tiempo de compilacin tienen que ver con una sintaxis incorrecta, como olvidar
escribir entre parntesis una condicin de definicin if. Los errores de tiempo de
ejecucin tienen que ver con cdigos que se comportan de manera incorrecta,
como intentar dividir entre cero. Como ya sabemos, los errores de tiempo de
compilacin se reparan generalmente, al corregir la sintaxis errnea, y los errores
de tiempo de ejecucin se reparan al robustecer el cdigo. A continuacin se
abordaran usando una tcnica diferente: el manejo de excepciones. Las
excepciones son errores, o simplemente algo que va mal en un programa. El
manejo de excepciones es una forma elegante de tratar con tales problemas.
Excepciones
Una excepcin es una situacin anmala a la que llega la ejecucin de un
programa. Estas situaciones anmalas pueden ser desde el intento de abrir un
fichero que no existe, a la divisin por cero.
Java proporciona un mecanismo para detectar y solucionar las excepciones que
se puede llegar a producir durante la ejecucin de un programa. En Java estamos
obligados a tratar las excepciones cuando se producen, bien gestionndolas
directamente o bien desentendindonos de ellas, pero hasta esto ltimo debemos
hacerlo explcitamente.
void metodo1(){
...
try {
// Cdigo que puede lanzar las excepciones IOException y MyException
} catch (IOException e1) {// Se ocupa de IOException simplemente dando aviso
System.out.println(e1.getMessage());
} catch (MyException e2) {
// Se ocupa de MyException dando un aviso y finalizando la funcin
System.out.println(e2.getMessage()); return;
} finally { // Sentencias que se ejecutarn en cualquier caso
...
}
...
} // Fin del metodo1
Mtodo finally
El bloque finally debe ir detrs de todos los bloques catch considerados. Si se
incluye (ya que es opcional) sus sentencias se ejecutan siempre, sea cual sea el
tipo de excepcin que se produzca, o incluso si no se produce ninguna. El bloque
finally se ejecuta incluso si dentro de los bloques try/catch hay una sentencia
continue, break o return. La forma general de una seccin donde se controlan las
excepciones es por lo tanto:
try {
// Cdigo vigilado que puede lanzar una excepcin de tipo A, B o C
} catch (A a1) {
// Se ocupa de la excepcin A
} catch (B b1) {
// Se ocupa de la excepcin B
} catch (C c1) {
// Se ocupa de la excepcin C
} finally {
// Sentencias que se ejecutarn en cualquier caso
}
Si el fichero del que se pretende leer no existe, se lanza una excepcin del tipo
FileNotFoundException que atrapamos en el bloque catch correspondiente. En la
jerarqua de las clases excepcin, FileNotFoundException hereda de IOException
que a su vez hereda de Exception que es la raz de esta jerarqua; por lo tanto los
bloques catch deben aparecer de mayor a menor profundidad en la jerarqua, ya
que de lo contrario como un FileNotFoundException es un IOException, la
excepcin quedara atrapada en este bloque.
Como hemos comentado antes, no es necesario que tratemos las excepciones,
pero si no lo vamos a hacer, debemos indicarlo explcitamente. El modo de hacerlo
es indicando que el mtodo dentro del cual se puede lanzar una excepcin a su
vez la relanza, aqu tienes un ejemplo: void metodoLanzador(int a) throws
IOException, ClassNotFoundException {...}
Una situacin comn es que en un mtodo en el que se pueden producir varias
excepciones, sea necesario liberar recursos si alguna de ellas se produce. Piensa
por ejemplo en un mtodo que est accediendo a una base de datos, si se
produce alguna excepcin probablemente deseemos cerrar la conexin con la
base de datos. Para evitar escribir el mismo cdigo sea cual sea la excepcin que
se produce el par try{...} catch{...} se puede ampliar con un bloque finally{...}, de
modo que, sea cual sea la excepcin que se produzca, al salir del bloque catch{...}
que la trate siempre se ejecuta el bloque finally. En el Ejemplo 7-1 se muestra un
caso de uso.
Como Crear Excepciones Propias
Para crear una excepcin propia basta extender la clase Exception o la
excepcin ms adecuada, y en el constructor de la clase llamar a la clase padre
con el mensaje que se desee mostrar cuando se produzca la excepcin.
Para arrojar una excepcin explcitamente, utilizamos la palabra reservada trhow e
indicamos en la declaracin del mtodo que puede lanzar la excepcin deseada.
En el siguiente cdigo tienes un ejemplo.
Observa que para arrojar una excepcin debes crear un objeto del tipo de la
excepcin que deseas lanzar.
Cuando la JVM instancia un objeto excepcin, se dice que la JVM lanza un
excepcin. Aqu se preferia decir lanza un objeto excepcin en lucar de lanza
una excepcin puesto que la cosa que se lanza es un objeto excepcin.
Ejemplo:
public class MiExcepcion extends Excepcion {
public MiExcepcion() {
super("Texto de la excepcion");
}
}
public class LanzaExcepcion {
public void metodo() throws MiExcepcion {
//...
if(a < b) trhow new MiExcepcion();
//...
}
}
public class OtraClase {
public void metodo() {
LanzaExcepcion le = new LanzaExcepcion();
try {
le.metodo();
}
catch (MiExcepcion e) {
System.err.println(e.getMessage());
}
}
Programa Ejemplo
package javaapplication4;
import java.util.Scanner;
import java.util.InputMismatchException;
Tipos de Errores
o Errores de Sintaxis:
Cuando en alguna instruccin del cdigo fuente de un programa existe un error de
sintaxis, dicho error impedir, tanto al compilador como al intrprete, traducir dicha
instruccin, ya que, ninguno de los dos entender qu le est diciendo el
programador. Por ejemplo, en lenguaje C.
Si en vez de la instruccin:
printf( "\n Introduzca el primer nmero (entero): " );
Un programador escribe:
prrintf( "\n Introduzca el primer nmero (entero): " );
Cuando el compilador o el intrprete lean esta lnea de cdigo, ninguno de los dos
entender qu es "prrintf" y, por tanto, no sabrn traducir esta instruccin a cdigo
o Errores de Ejecucin:
Un error de ejecucin se produce cuando el ordenador no puede ejecutar alguna
instruccin de forma correcta. Por ejemplo, en lenguaje C, la instruccin:
c = 5 / 0;
Es correcta sintcticamente y ser traducida a cdigo binario. Sin embargo,
cuando la computadora intente realizar la divisin:
5/0
Se producir un error de ejecucin, ya que, matemticamente, no se puede dividir
entre cero.
o Errores de Lgica:
En cuanto a los errores de lgica son los ms difciles de detectar. Cuando un
programa no tiene errores de sintaxis ni de ejecucin, pero, aun as, no funciona
bien, esto es debido a la existencia de algn error lgico. De manera que, un error
de lgica se produce cuando los resultados obtenidos no son los esperados. Por
ejemplo, en lenguaje C, si en vez de la instruccin:
c = a + b;
Un programador hubiera escrito:
c = a * b;
Conclusin
Para realizar nuevas excepciones basta con declarar a una clase como hija de la
clase Exception. Se puede crear excepciones diferentes a las existentes ya preestablecidas en el lenguaje de programacin java. Se pudo realizar las
excepciones con las cuales se cumpli los objetivos planteamos. Logramos validar
cdula por medio de excepciones.