Implantación de Aplicaciones Web

UT3. Programación orientada a objetos. Programación Java

5. Sistemas de Excepciones en Java

Exception

En Java los errores son conocidos como excepciones. Una excepción es un problema que impide continuar con la ejecución del código porque no tiene suficiente información para seguir adelante.

En Java, todas las excepciones derivan de la clase Throwable. De Throwable descienden dos clases directas: Error y Exception.

La clase Error está relacionada con errores de la máquina virtual de Java y no del código. Generalmente estos errores no dependen del programador por lo que no debe preocuparse por tratarlos.

La clase Exception es donde se encuentran las excepciones RuntimeException, producidas por errores de programación.


Cuando se produce un error en un método, este crea un objeto exception que contiene información sobre la excepción como el tipo y el estado del programa al presentarse el problema.

Para obtener el objeto exception creado, utilizamos los bloques try/catch que permiten obtenerlo sin cambiar la estructura del código del programa.

Bloque Try/Catch y Finally

El bloque try gobierna las sentencias encerradas dentro de él y define el ámbito de cualquier manejador de excepciones, establecido por el bloque catch, asociado con él.

El bloque finally proporciona un mecanismo que permite a sus métodos limpiarse a sí mismos sin importar lo que sucede dentro del bloque try. Se utiliza finally para cerrar ficheros o liberar otros recursos del sistema despues de que suceda la excepción.

Estructura

try { ...
	} catch (...) { ...
	} finally {...}
			

Throw

Cuando no se quiere recoger el error y tratarlo, existe otra posibilidad que lo que hace es detectarlo e informar sobre el error. Para realizar esto lanzamos la excepción con throw.

Un método detecta una condición anormal que le impide continuar con su ejecución y finaliza "lanzando" un objeto excepción (throw).

Ejemplo

package dividir;
import java.io.*;

public class Dividir {
    
    public static void main(String[] args) throws IOException {
        BufferedReader in=new BufferedReader (new InputStreamReader (System.in));
        int num1;
        System.out.println("Dime un número");
        num1= Integer.valueOf(in.readLine().trim()).intValue();
        int num2;
        System.out.println("Dime otro número para dividirlo");
        num2= Integer.valueOf(in.readLine().trim()).intValue();
        
        int resultado;
        try
        {
            resultado= num1 / num2;
            System.out.println("El resultado de la division es "+resultado);
        }catch (ArithmeticException error01) {
            System.out.println("No se puede dividir entre 0");
        }catch (NumberFormatException error2) {
            System.out.println("Lo que ha introducido no es un numero");
        }finally {
            resultado = num1+num2;
            System.out.println("La suma de los numeros es "+resultado);
        }
    }
}
			

Recursos

http://www.arrakis.es/~abelp/ApuntesJava/GestionExcepciones.htm

http://www.tecn.upf.es/~bouayad/prog/material/teoria/streams/exceptions.pdf

http://fcqi.tij.uabc.mx/usuarios/palacios/java5.pdf