Está en la página 1de 4

Java Excepciones 1

Excepciones
Java Excepciones 2
Excepciones
Situaciones anmalas que aparecen durante la ejecucin
de un programa
Cuando aparece una condicin excepcional se crea un objeto Throwable
que se enva al mtodo que la ha generado
Su gestin permite la deteccin y correccin de errores en
ejecucin
Simplifican los programas ya que se diferencia el cdigo
normal del cdigo de tratamiento de errores
Se crean programas mas robustos ya que en muchos casos si
no se trata la excepcin el programa no compila
Slo se deben usar cuando no se puede resolver la situacin
anmala directamente en ese contexto
Se tiene que seguir haciendo el control de errores habitual
Java Excepciones 3
Dos tipos de situaciones excepcionales
Excepciones
Situaciones ms o menos habituales que impiden completar la
ejecucin correcta del cdigo
Generalmente el programador debe proporcionar el cdigo que
las trate o gestione
Ejemplos
Error en el cdigo o en los datos
Uso inadecuado de un mtodo
Errores
Representan situaciones de error normalmente no recuperables
El programador normalmente no tiene que proporcionar un
tratamiento para ellas
Ejemplos
No se puede localizar y cargar una clase, Se agota la memoria
Java Excepciones 4
Tipos de excepciones
Predefinidas en el sistema
Se lanzan automticamente cuando se realiza alguna operacin
no valida
acceso a un objeto que no existe,
acceso a una posicin de un array que no existe,
divisin por cero
Generadas por el programador
El programa explcitamente genera una excepcin al detectar
una situacin de error que no se puede resolver en ese
contexto
til en situaciones de prueba y depuracin
Java Excepciones 5
Gestin de excepciones
Sintaxis
try {
// bloque de cdigo donde puede producirse una excepcin
}catch( TipoExcepcin1 e ) {
// gestor de excepciones para TipoExcepcin1
// se ejecuta si se produce una excepcin de tipo TipoExcepcin1
}catch( TipoExcepcion2 e ) {
// gestor de excepciones para TipoExcepcin2
throw(e); // se puede volver a lanzar la excepcin -- propagar
} finally {
// bloque de cdigo que se ejecuta siempre, haya o no excepcin
}
Java Excepciones 6
Gestin de excepciones
try
Es el bloque de cdigo donde se prev que se genere una excepcin
Debe ir seguido por lo menos por una instruccin catch o finally
catch (TipoExcepcion e)
Es el cdigo que se ejecuta cuando se produce la excepcin del tipo
indicado
Pueden aparecer varias instrucciones catch para tratar distintas
excepciones
Cuando se produce una excepcin se compara si coincide con la
excepcin del primer catch. Si no coincide con la del segundo y
sucesivos
finally
Es el bloque de cdigo que se ejecuta siempre, haya o no excepcin
throw
Permite lanzar de forma explcita una excepcin
Se puede utilizar para propagar una excepcin tratada parcialmente
Java Excepciones 7
Propagacin de excepciones
Entorno Java
(Java runtime)
Entorno Java
(Java runtime)
Mtodo main()
Primer mtodo
Segundo mtodo
(Excepcin generada aqu)
Llamadas
mtodos
Paso de
excepciones
Todas las excepciones que se puedan generar se han de manejar o delegar
Java Excepciones 8
Excepciones predefinidas
RuntimeExceptions
ArrayIndexOutOfBoundsException
ArithmeticException
NullPointerException
ClassCastException
IllegalArgumentException
No es obligatorio incluir cdigo
de tratamiento de este tipo de
excepciones
aunque se puede incluir
dicho cdigo
Java Excepciones 9
Ejemplo simple excepciones
public class PruebaExcepciones {
public static void main(String args[]) {
int valor=5, cero=0;
int[] array = {1, 2, 3};
try {
valor = valor/cero; //divisin por cero
array[4]= 5; //acceso a una posicin no disponible
}
catch( ArithmeticException e ) {
System.out.println( "Division por cero" );
}
catch( Exception e ) {
System.out.println( "Se ha producido un error" );
}
}
}
Java Excepciones 10
Propagacin de excepciones
public class PruebaExcepcion {
public static void main(String args[]) {
int valor=5, cero=0;
int[] array = {1, 2, 3};
try {
try {
valor = valor/cero; //divisin por cero
array[4]= 5; //acceso a una posicin no disponible
}catch( ArithmeticException e ) {
System.out.println( "Division por cero" );
throw e;
}catch( Exception e ) {
System.out.println( "Se ha producido un error" );
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Java Excepciones 11
Gestin incompleta de excepciones
Si un mtodo no gestiona o captura todas las excepciones
que puede generar (excepto del tipo Error o RuntimeException)
debe especificarlo mediante throws
TipoDevuelto nombreMetodo(argumentos) throws listaExcepciones
{ /* cuerpo del mtodo */ }
import java.io.*;
public class PruebaExcepciones {
public static char leer() throws IOException {
return (char) System.in.read();
}
public static void main(String args[]) {
try {
char car=leer();
System.out.println("Caracter: "+car);
} catch (IOException e) {
System.out.println("Error de entrada de datos");}}
Java Excepciones 12
Lanzamiento de excepciones
public class Alumno{
public Alumno(String nombre, String apellidos) throws Exception{
if(nombre == null || apellidos == null)
throw new Exception("Argumentos no vlidos");
//si el constructor lanza la excepcin el objeto no se crea
}
public static void main(String args[]) {
try{
Alumno alum= new Alumno(null, "hola");
}catch (Exception e){
System.out.println("Excepcion: "+ e.getMessage());
}
}
}
Java Excepciones 13
Excepciones definidas por el programador
El programador puede definir sus propias clases de
excepciones
Se define una clase que herede de Throwable o ms
normalmente de Exception
public class EdadFueraDeRangoException extends Exception {
public EdadFueraDeRangoException (String texto) {
super(texto);
}
}
Java Excepciones 14
Ejemplo excepcin definida por el usuario
Public class Persona{
int edad;
.....
public void ponEdad(int ed) throws EdadFueraDeRangoException {
if ((ed < 0) || (ed > 130))
throw new EdadFueraDeRangoException("Demasiado joven o demasiado viejo");
edad = ed;
}}
try {
alguien.ponEdad(150);
} catch (EdadFueraDeRangoException e){
System.out.println("se ha producido la excepcin");
e.printStackTrace();
System.out.println(e.getMessage());
}
EdadFueraDeRangoException: Demasiado joven o demasiado viejo
at Persona.ponEdad<Persona.java>
at Persona.main<Persona.java>

También podría gustarte