Está en la página 1de 5

CUGS Programación Avanzada

Centro Universitario Grupo Sol.


Materia: Programación Avanzada.
Profesor: M. I. Alejandro Cifuentes A.

Capítulo 6 : EXCEPCIONES.

Objetivos:
Al término del capítulo, será capaz de:
 Definir las excepciones.
 Explicar por qué es importante el manejo de las excepciones.
 Escribir código para capturar excepciones.
 Crear sus propias excepciones.

Excepciones.
¿Qué es una excepción?. En Java, la clase Exception define condiciones leves de error que los programas se
pueden encontrar. En lugar de permitir que un programa termine, se puede escribir código para manejar las
excepciones y continuar la ejecución del programa.

¿Qué es un error?. La clase Error define lo que se consideran condiciones graves de error y de las que no se debe
intentar una recuperación. En la mayoría de los casos, es recomendable permitir que un programa termine si se
encuentra un error.

Java implanta las excepciones al estilo de C++ para ayudar a construir código flexible. Cuando un error ocurre en un
programa, el código que encuentra un error puede lanzar una excepción. El lanzamiento de una excepción es el
proceso de señalarle al proceso actual que ha ocurrido un problema. Después, se puede capturar la excepción lanzada
y cuando sea posible, recuperarse de ella.

Considérese una extensión sencilla de la versión del programa HolaMundo.java (el cual se cicla con mensajes):
public class HolaMundo{
public static void main(String args[]){
int i = 0;
String saludos[] = {"Hola mundo!","No,lo siento!","HOLA MUNDO!"};
while(i < 4){
System.out.println(saludos[i]);
i++;
}
}
}

Manejo de excepciones.
Normalmente, un programa termina con un mensaje de error cuando se lanza una excepción, como lo hace el
ejemplo anterior, después de ejecutarse cuatro veces el ciclo.
java HolaMundo
Hola mundo!
No, lo siento!
HOLA MUNDO!!
java.lang.ArrayIndexOutOfBoundsException: 3
at HolaMundo.main(HolaMundo.java:12)

Sin embargo, la importancia del manejo de una excepción es que se pueda codificar el programa para atrapar
excepciones, manipularlas y luego continuar la ejecución del programa. Java posee herramientas que le permiten
considerar que excepción se lanzó y luego intentar la recuperación.

M. I. Alejandro Cifuentes A. 1
CUGS Programación Avanzada

Los enunciados try y catch.


Para manejar una excepción en particular, se utiliza el enunciado try con código que pueda lanzar esa excepción.
Para capturar y actuar sobre las excepciones lanzadas utilice el enunciado catch, para especificar la captura de la
excepción y ejecutar el código por si se lanza la excepción especificada.
try{
//CODIGO QUE PUDIERA LANZAR UNA EXCEPCION EN PARTICULAR.
}
catch(MiTipoDeExcepción e){
//CODIGO A EJECUTAR, SI SE LANZA LA EXCEPCION MiTipoDeExcepción
}

El enunciado finally.
El enunciado finally define un bloque de código que siempre se pretende utilizar, considerando que se capture, o no,
una excepción. El siguiente código de muestra es tomado de los apuntes de Frank Yellin, "El bajo nivel de seguridad
en Java":
try{
iniciaRiego();
regadera();
}
finally{
paraRiego();
}

Java garantiza que el riego se detiene, aún si ocurre una excepción mientras se inicia el riego del césped. El código
entre llaves, después de try, se llama código protegido.

La única vez en que el enunciado finally no se ejecutaría, es cuando el método System.exit() se ejecuta
dentro del código protegido.

Entonces el programa terminaría inmediatamente.

Ejemplo.
El siguiente ejemplo es una versión de HolaMundo.
La excepción generada en la primera versión del programa se captura y el índice del arreglo es puesto a 0.
public static void main(String args[]){
int i = 0;
String saludos[] = {"Hola mundo!!, "No, lo siento!", "HOLA MUNDO!!"};
while(i < 4){
try{
System.out.println(saludos[i]);
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("Reasignando el valor del índice");
i = -1;
}
catch(Exception e){
System.out.println(e.toString());
}
finally{
System.out.println("Esto siempre se despliega");
}
i++;
} //FIN DEL while().
} //FIN DE main().

M. I. Alejandro Cifuentes A. 2
CUGS Programación Avanzada

El mensaje desplegado se alterna entre los demás mientras se ejecuta el ciclo:


Hola mundo!
Esto siempre se despliega
No, lo siento!
Esto siempre se despliega
HOLA MUNDO!
Esto siempre se despliega
Reasignando el valor del índice
Esto siempre se despliega

Categorías de excepciones.
En Java, existen tres amplias categorías de excepciones.

Se define la clase java.lang.Throwable, que actúa como la clase padre para todos los objetos que puedan ser
lanzados y capturados, utilizando los mecanismos de manejo de excepciones.

Existen tres subclases esenciales:


Throwable

Exception Error

RuntimeException

La clase Throwable no se utiliza; en su lugar, se utiliza una de las otras tres para describir cualquier excepción en
particular. El propósito de cada una es:
 Error indica la existencia de un error severo del cual es difícil, si no imposible, recuperarse. Un ejemplo es la
corrida fuera de memoria. Se espera que un programa no maneje tales condiciones, a pesar de que posiblemente
se hiciera con cuidado.
 RuntimeException se debe utilizar para indicar un problema de diseño o implantación. Esto es, debe
indicar, durante la ejecución, condiciones que nunca deberían suceder si el programa se opera apropiadamente.
Esto se aplicaría, por ejemplo, al desborde de los índices del arreglo y a la liberación de una variable nula de
objeto. Debido a que un programa bien diseñado e implantado nunca emite este tipo de excepción, es usual no
manejarla. Esto produce un mensaje en tiempo de corrida y asegura cuales acciones se pueden tomar para
corregir el problema, en lugar de esconderlo en donde nadie lo notará.
 Otras excepciones indican la ocurrencia de una dificultad en tiempo de corrida debido a los efectos ambientales,
y se pueden manejar. Por ejemplo, las excepciones del tipo file not found o malformed URL, pueden
ocurrir fácilmente si el usuario introduce algo equivocado. Dado que estos errores ocurren debido al usuario, se
sugiere que los maneje el programador.

Excepciones comunes.
Java proporciona varias excepciones predefinidas. Las siguientes son excepciones comúnmente encontradas:
 ArithmeticException El resultado típico de una operación al dividir enteros por cero:
int i = 12 / 0;
 NullPointerException Un intento de accesar un objeto o un método antes de ser instanciado:
Image im[] = new Image[4];
System.out.println( im[0].toString() );
 NegativeArraySizeException Un intento de crear un arreglo con una dimensión negativa.
 ArrayIndexOutOfBoundsException Un intento de accesar un elemento de un arreglo mas allá de la
definición original del tamaño del arreglo.
 SecurityException Típicamente lanzada en un navegador, la clase SecurityManager lanza una
excepción para los applets que intenten:

M. I. Alejandro Cifuentes A. 3
CUGS Programación Avanzada

 Accesar un archivo local.


 Abrir un socket diferente al del host que sirvió el applet.
 Ejecutar otro programa en el ambiente de tiempo de corrida.

La regla "maneje o declare".


Para estimular la escritura de código robusto, Java requiere que si un método hace algo que pudiera lanzar una
excepción, distinta de Error o RuntimeException, debe quedar claro cual acción se debe tomar si surge algún
problema.

Hay dos cosas que el programador puede hacer para satisfacer esto: Lo primero es utilizar un bloque try{} catch()
{}, donde catch nombra cualquier superclase de la excepción lanzada para manejar la situación, inclusive si el
bloque catch se encuentra vacío.

Lo segundo es indicar que la excepción no se maneje en este método, y que por consiguiente será lanzada hacia el
método que realiza la llamada. Esto se logra marcando la declaración del método con una cláusula throws, de la
siguiente forma:
public void algúnProblema() throws IOException

Enseguida de la palabra throws, se escribe una lista de todas las excepciones que pudieran surgir dentro del
método, pero que no se manejan ahí. Aunque aquí solo se muestra una excepción, se puede utilizar una lista separada
con comas, si es que existen excepciones múltiples que no se manejan en el método.

Creación de sus propias excepciones.


Para crear sus propias excepciones se puede utilizar la siguiente sintaxis:
public class ServerTimedOutException extends Exception{
private String razon;
private int puerto;

public ServerTimedOutException(String razon, int puerto){


this.razon = razon;
this.puerto = puerto;
}
public String tomaRazon(){
return razon;
}
public int tomaPuerto(){
return puerto;
}
}

Para lanzar una excepción que se haya creado, se utiliza la siguiente sintaxis:
throw new ServerTimedOutException("No se pudo conectar", 80);

Ejemplo.
Considere un programa cliente-servidor. En el código cliente, se pretende conectar al servidor y espera que éste
responda en unos cinco segundos. Si el servidor no responde, el código podría lanzar una excepción (alguna similar a
ServerTimedOutException definida por el usuario), como la siguiente:
public void conectame(String nombreDeServidor) throws ServerTimedOutException{
int exito;
int puertoParaConectarse = 80;
exito = open(nombreDelServidor, puertoParaConectarse);
if(exito == -1){
throw new ServerTimedOutException("No se pudo conectar", 80);
}
}

M. I. Alejandro Cifuentes A. 4
CUGS Programación Avanzada

Para atrapar su excepción, utilice el enunciado try:


public void buscaServidor(){
. . .
try{
conectame(servidorPorDefinicion);
}
catch(ServerTimedOutException e){
g.drawString("Servidor no responde, intente alternativa", 5, 5);

try{
conectame(servidorAlterno);
}
catch(ServerTimedOutException e1){
g.drawString(Servidor disponible actualmente", 5, 5);
}
}
. . .

Ejercicios.
1. Manejo de una excepción.
Utilice el programa HolaMundo.java para lanzar una excepción cuando el índice exceda el tamaño del
arreglo. Utilice los enunciados try y catch para recuperarse de la excepción.

2. Creación de una excepción propia.


Utilice el paquete banco que se diseñó en el capítulo anterior y añada las siguientes excepciones:
 CuentaSobregiradaException Cuando se intenta tomar más dinero del que se tiene en la
cuenta.
 DepositoInvalidoException Cuando se realizan depósitos inválidos (menores a cero).

M. I. Alejandro Cifuentes A. 5

También podría gustarte