1. TIPOS DE EXCEPCIONES
Existen varios tipos fundamentales de excepciones:
Error: Excepciones que indican problemas muy graves, que suelen ser no recuperables y no
deben casi nunca ser capturadas.
Exception: Excepciones no definitivas, pero que se detectan fuera del tiempo de ejecución.
RuntimeException: Excepciones que se dan durante la ejecución del programa.
Todas las excepciones tienen como clase base la clase Throwable, que está incluida en el paquete
java.lang, y sus métodos son:
Trowable( String mensaje ); Constructor. La cadena es opcional
Throwable fillInStackTrace(); Llena la pila de traza de ejecución.
String getLocalizedMessage(); Crea una descripción local de este objeto.
String getMessage(); Devuelve la cadena de error del objeto.
void printStackTrace( PrintStream_o_PrintWriter s ); Imprime este objeto y su traza en el flujo
del parámetro s, o en la salida estándar (por defecto).
String toString; Devuelve una breve descripción del objeto.
La superclase de todas las excepciones es la clase Throwable. Sólo las instancias de esta clase o
alguna de sus subclases pueden ser utilizadas como excepciones. La clase Trowable tiene dos
clases derivadas: Error y Exception.
La clase Exception sirve como superclase para crear excepciones de propósito específico
(adaptadas a nuestras necesidades), por ejemplo, si estamos diseñando una clase que lee
secuencialmente bytes en una cinta digital de datos, podemos crear la excepción: FinDeCinta que
se produce cuando el dispositivo físico ha alcanzado el final de la cinta. Otro ejemplo podría ser la
implementación de una clase de envío de datos a un satélite no geoestacionario, donde convendría
incluir una excepción FueraDeCobertura que se produzca cuando el satélite se encuentre fuera del
alcance de nuestra antena parabólica. Un último ejemplo: si escribimos un driver de impresora
podemos crear una clase derivada de Exception para que nos avise de la situación excepcional
FinDePapel .
La clase Error sirve de superclase para una serie de clases derivadas ya definidas que nos informan
de situaciones anormales relacionadas con errores de muy difícil recuperación producidos en el
sistema.
2.
3. Si existe excepción
....................
Numerador = .............
Denominador = ............
Resultado = Numerador / Denominador;
....................
System.out.println (“No se puede realizar la división”);
No es obligatorio tratar las excepciones derivadas de la clase Error, ya que en la ejecución de una
aplicación probablemente nunca se produzcan estas situaciones anormales, sin embargo, sí que es
obligatorio hacer un tratamiento explícito de las excepciones derivadas de la clase Exception (no
podemos ignorar la falta de cobertura de un satélite, el fin del papel en una impresora, el fin de datos
en una lectura secuencial, etc.). En una aplicación bien diseñada e implementada es muchísimo más
probable que se produzcan excepciones de tipo Exception que excepciones de tipo Error.
La clase Exception tiene un amplio número de clases derivadas proporcionadas por el SDK, por
ejemplo existen excepciones predefinidas para el uso de ficheros, de SQL, etc. De todas estas
subclases, RuntimeExeption tiene una característica propia: no es necesario realizar un tratamiento
explícito de estas excepciones (de todas las demás clases derivadas de Exception si es necesario).
Esto es debido a que, al igual que con las excepciones derivadas de Error, existen pocas
posibilidades de recuperar situaciones
Entre las clases derivadas de RuntimeException se encuentran: anómalas de este tipo.
El siguiente gráfico muestra las clases más importantes en el uso de excepciones y su jerarquía . En
las clases no sombreadas es obligatorio realizar un tratamiento explícito de las excepciones, en las
clases sombreadas no es necesario este tratamiento
4. En el apartado anterior adelantábamos el diseño básico del tratamiento de excepciones: separar el
código de los programas del código de control de situaciones excepcionales en los programas, y los
ilustrábamos gráficamente con el siguiente ejemplo:
El bloque superior representa el código del programa y se le denomina bloque de “intento” (try). Aquí
se introduce el código del programa susceptible de causar cierto tipo de excepciones. Las
instrucciones se incluyen en un bloque con la siguiente sintaxis:
try {
// instrucciones susceptibles de causar cierto tipo de excepciones
}
El bloque inferior contiene las instrucciones de control de situaciones excepcionales. La sintaxis es:
catch (TipoDeExcepcion Identificador) {
// instrucciones de control de situaciones excepcionales
}
5. Entre el bloque try y el bloque catch no puede haber ninguna instrucción. Ambos bloques se
encuentran ligados en ejecución.
El funcionamiento es el siguiente: se ejecutan las instrucciones del bloque try hasta que se produzca
la situación de excepción de tipo TipoDeExcepcion; nótese que, habitualmente, no se producirá la
excepción y se ejecutarán todas las instrucciones del bloque try. Si se da la excepción, se pasa a
ejecutar las instrucciones del bloque catch y, posteriormente, las instrucciones siguientes al bloque
catch. Si no se produce la excepción no se ejecutan las instrucciones del bloque catch. Gráficamente: