Está en la página 1de 18

EXCEPCIONES

La filosofía básica de Java es que "el código mal formado


no se ejecutará".
EXCEPC
IÓN
¿Qué es una excepción?
La palabra excepción indica una irregularidad en el software que se inicia en alguna
sentencia del código al encontrar una condición anormal; no se debe confundir con
una excepción hardware.

Mediante la captura de excepciones, Java proporciona un mecanismo que permite


al programa sobreponerse a estas situaciones, pudiendo el programador decidir las
acciones a realizar para cada tipo de excepción que pueda ocurrir.
ERROR
¿Qué es un error?
Un error representa una situación anormal irreversible, como por ejemplo un fallo de
la maquina virtual. Por regla general, un programa no deberá intentar recuperarse de
un error, dado que son situaciones que se escapan al control del programador.
Cada tipo de excepción está representada por una subclase de Exception, mientras
que los errores son subclases de Error. Ambas clases (Exception y Error), son
subclases de Throwable.

Excepciones
Object
Errores

Throwable

Exception Error
EXCEPCIONES Y CONDICIONES
 Las excepciones son eventos anormales que ocurren durante la ejecución
ANORMALES
del programa, a continuación tenemos algunos ejemplos que lanzan
excepciones:
 Cuando un número es dividido entre cero.
 Cuando se accede a un elemento de un arreglo que este fuera del límite
del arreglo.
 Cuando existe una condición de desborde (overflow) durante la
asignación de valores a variables numéricas.
 Cuando un recurso es requerido por la aplicación y no está disponible.
 Cuando se requiere de un archivo para lectura, y el mismo no encuentra
disponible en el sistema de archivos.
 Cuando la aplicación accede a recursos del sistema sin autorización.
SECUENCIAS DE ACCIONES CUANDO SE
PRODUCE UNA EXCEPCIÓN
El manejador de
Analiza la naturaleza de Crea un “objeto exception”
excepciones recibe la
la excepción apropiado a través del manejador
excepción
Error

Prepara el “objeto exception” para ser Sistema de


tiempo Localiza en la pila de llamadas la entrada del
manejado por el sistema en tiempo de
de método en el cual ocurrió al condición de error
ejecución
ejecución

Si

¿La excepción
¿Hay más Diferente
Se desciende en la pila de llamadas para lanzada es
manejadore
localizar el próximo manejador igual al tipo
s en la pila?
manejada?

Igual
Detiene el No
sistema
en tiempo Preparar para capturar la Localiza el manejador de excepciones
de excepción apropiado para esta excepción
ejecución
CLASES DE
EXCEPCIÓN
Al producirse una excepción en un programa, se crea un objeto de la subclase de Exception a
la que pertenece la excepción.

Java.lang-Exceptions
TIPOS DE
EXCEPCIÓN
Desde el punto de vista del tratamiento de una excepción dentro de un
programa, todas las clases de excepción se dividen en dos grandes grupos:
Excepciones marcadas
Excepciones no marcadas
EXCEPCIONES
MARCADAS
Son aquellas
cuya
captura es obligatoria. Normalmente, este tipo de
excepciones se producen al invocar a ciertos métodos de determinadas
clases y son lanzadas desde el interior de dichos métodos
consecuencia de algún fallo durante la ejecución de los mismos.
como
Todas las clases de excepciones, salvo RuntimeException y sus subclases,
pertenecen a este tipo.
DECLARACIÓN DE
EXCEPCIONES MARCADAS
Los métodos que pueden provocar excepciones marcadas deben declarar
estas en la definición del método.

Para declarar una excepción se utiliza la palabra throws, seguida de la lista de


excepciones que el método puede provocar.
public class Nombre_Clase {
public String readLine() throws IOException {
Excepciones que puede
//Código del método “lanzar” el método
}

public void Service() throws ServletException, IOException {


//Código del método
}
}
EXCEPCIONES NO
Pertenecen a este grupo todas las excepciones de tiempo de ejecución, es decir,
MARCADAS
RuntimeException y todas sus clases.

No es obligatorio capturar dentro de un programa Java una excepción no


marcada, el motivo es que gran parte de ellas, se producen como consecuencias
de una mala programación, por lo que la solución está en evitar que se
produzcan.
CAPTURA DE
EXCEPCIONES
Los bloques try…catch…finally
Las instrucciones try, catch y finally proporcionan una forma elegante y estructurada
de capturar excepciones dentro de un programa Java, evitando la utilización de
instrucciones de control que dificultarían la lectura del código y lo harían más
propenso a errores.
Tipo de excepción Nombre del objeto excepción
try { a procesar transferido al manejador

//Instrucciones donde se puede producir excepciones


} catch (Tipo_de_excepcion Argumento) {
//Tratamiento excepcion 1
Lista de sentencias que
} catch (Tipo_de_excepcion Argumento) { procesan la excepción
//Tratamiento excepcion 2
} finally {
//Instrucciones de ultima ejecución
}
CAPTURA DE
EXCEPCIONES
El bloque try delimita aquella o aquellas instrucciones dónde se puede producir una
excepción, cuando esto sucede, el control del programa se transfiere al bloque catch
definido para el tipo de excepción que se ha producido.
Un bloque catch define las instrucciones que deberán ejecutarse en caso de que se
produzca un determinado tipo de excepción. Sobre la utilización de los bloques catch se
debe tener en cuenta lo siguiente:
 Se pueden definir tantos bloques catch como se considere necesario. Cada bloque catch servirá
para tratar un determinado tipo de excepción, no pudiendo haber dos o más catch que tengan
declarada la misma clase de excepción.
 Un bloque catch sirve para capturar cualquier excepción que se corresponda con el tipo declarado
o cualquiera de sus subclases.
 Aunque haya varios posibles catch que pueden capturar una excepción, solo uno de ellos será
ejecutado cuando esta se produzca.
 Tras la ejecución de un catch, el control del programa nunca se devuelve al lugar donde se ha
producido la excepción.
CAPTURA DE
EXCEPCIONES
finally
Su uso es opcional. El bloque finally se ejecutará tanto si se produce una excepción
como si no, garantizando así que un determinado conjunto de instrucciones siempre
sean ejecutada.
Si se produce una excepción en try, el bloque finally se ejecutará después del catch
para tratamiento de la excepción. En caso de que no hubiera ningún catch para el
tratamiento de la excepción producida, el bloque finally se ejecutaría antes de
propagar la excepción.
Si no se produce excepción alguna en el interior del try, el bloque finally se
ejecutará tras la última instrucción del try.
Se usa básicamente para tareas de limpieza, como cerrar archivos , conexiones a
bases de datos y liberar recursos.
Ejemplo
EJEMPLO
public static void main(String[] args) {
int [] array = new int[20];
        try
        {
array[-1]=4;
        }
        catch(ArrayIndexOutOfBoundsException excepcion)
        {
        System.out.println(" Error de índice en un array");
        }
        /*catch(Exception excepcion)
        {
        System.out.println(excepcion);
        }*/    
}
}
PROPAGACIÓN DE UNA
EXCEPCIÓN
En el caso de que no se tenga previsto ninguna acción particular para el tratamiento de
una determinada excepción, es posible propagar la excepción sin necesidad de capturarla,
dejando que sean otras partes del programa las encargadas de definir las acciones para su
tratamiento (throws).
public class Principal {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try { Es capturada aquí, al invocar el método imprime
imprime(br);
} catch ( IOException e )
{ System.out.println("Fallo de
Declara la excepción para
lectura..!"); que sea propagada
} }
static void imprime(BufferedReader bf) throws IOException
{ String n = bf.readLine(); //Puede provocar una
excepción
System.out.println(n);
}
PROPAGACIÓN DE UNA
EXCEPCIÓN
La excepción no es tratada por el 3
método main() y el programa
aborta su ejecución

1 2
Excepción no es La excepción no es
tratada y se lanza a la tratada y se lanza al
La sentencia lanza una excepción
convocatoria del método que llamo al
método método actual
MÉTODOS PARA EL CONTROL DE
UNA EXCEPCIÓN
Los métodos más importantes son:

String getMessage(). Devuelve un mensaje de texto asociado a la excepción,


dependiendo del tipo de objeto de excepción sobre el que se aplique.

void printStackTrace(). Envía a la consola el volcado de la pila asociado a la


excepción. Su uso puede ser muy útil durante la fase de desarrollo de la aplicación.

void printStackTrace(PrintStream s). Esta versión permite enviar el volcado


de pila a un objeto PrintStream cualquiera, por ejemplo, un archivo log.
PRACTICA
 Crear una clase llamada NumberDivision. Esta clase contendrá
un método que aceptará dos variables tipo String y otro
método que realizará la división entre estos.
 Si los Strings no son números válidos se genera una expeción, debe
ser capturada y se debe mostrar un mensaje de error.
 Si el segundo número (utilizado como divisor) es cero debe generar
otra excepción, que también debe ser captada y mostrar un
mensaje.

También podría gustarte