Está en la página 1de 4

Excepciones

• Situaciones anómalas que aparecen durante la ejecución


de un programa
❏ Cuando aparece una condición excepcional se crea un objeto Throwable
que se envía al método que la ha generado
• Su gestión permite la detección y corrección de errores en
Excepciones ejecución
• Simplifican los programas ya que se diferencia el código
normal del código de tratamiento de errores
• Se crean programas mas robustos ya que en muchos casos si
no se trata la excepción el programa no compila
• Sólo se deben usar cuando no se puede resolver la situación
anómala directamente en ese contexto
❏ Se tiene que seguir haciendo el control de errores habitual

Java Excepciones 1 Java Excepciones 2

Dos tipos de situaciones excepcionales Tipos de excepciones


• Excepciones • Predefinidas en el sistema
• Situaciones más o menos habituales que impiden completar la • Se lanzan automáticamente cuando se realiza alguna operación
ejecución correcta del código no valida
• Generalmente el programador debe proporcionar el código que ❏ acceso a un objeto que no existe,
las trate o gestione ❏ acceso a una posición de un array que no existe,
• Ejemplos ❏ división por cero

❏ Error en el código o en los datos • Generadas por el programador


❏ Uso inadecuado de un método
• El programa explícitamente genera una excepción al detectar
• Errores
una situación de error que no se puede resolver en ese
• Representan situaciones de error normalmente no recuperables contexto
• El programador normalmente no tiene que proporcionar un
tratamiento para ellas • Útil en situaciones de prueba y depuración
• Ejemplos
❏ No se puede localizar y cargar una clase, Se agota la memoria

Java Excepciones 3 Java Excepciones 4


Gestión de excepciones Gestión de excepciones
• Sintaxis • try
❏ Es el bloque de código donde se prevé que se genere una excepción
❏ Debe ir seguido por lo menos por una instrucción catch o finally
try { • catch (TipoExcepcion e)
// bloque de código donde puede producirse una excepción ❏ Es el código que se ejecuta cuando se produce la excepción del tipo
}catch( TipoExcepción1 e ) { indicado
// gestor de excepciones para TipoExcepción1 ❏ Pueden aparecer varias instrucciones catch para tratar distintas

// se ejecuta si se produce una excepción de tipo TipoExcepción1 excepciones


❏ Cuando se produce una excepción se compara si coincide con la
}catch( TipoExcepcion2 e ) {
// gestor de excepciones para TipoExcepción2 excepción del primer catch. Si no coincide con la del segundo y
sucesivos
throw(e); // se puede volver a lanzar la excepción -- propagar
} finally { • finally
// bloque de código que se ejecuta siempre, haya o no excepción ❏ Es el bloque de código que se ejecuta siempre, haya o no excepción
} • throw
❏ Permite lanzar de forma explícita una excepción
❏ Se puede utilizar para propagar una excepción tratada parcialmente

Java Excepciones 5 Java Excepciones 6

Propagación de excepciones Excepciones predefinidas


• RuntimeExceptions
Entorno Java
Entorno Java ArrayIndexOutOfBoundsException
(Java
(Java runtime)
runtime) ArithmeticException
NullPointerException
ClassCastException
Llamadas Método main() Paso de IllegalArgumentException
excepciones
métodos • No es obligatorio incluir código
de tratamiento de este tipo de
Primer método excepciones
• aunque se puede incluir
dicho código
Segundo método
(Excepción generada aquí)

Todas las excepciones que se puedan generar se han de manejar o delegar

Java Excepciones 7 Java Excepciones 8


Ejemplo simple excepciones Propagación de excepciones
public class PruebaExcepciones { public class PruebaExcepcion {
public static void main(String args[]) {
public static void main(String args[]) { int valor=5, cero=0;
int valor=5, cero=0; int[] array = {1, 2, 3};
int[] array = {1, 2, 3}; try {
try { try {
valor = valor/cero; //división por cero valor = valor/cero; //división por cero
array[4]= 5; //acceso a una posición no disponible array[4]= 5; //acceso a una posición no disponible
} }catch( ArithmeticException e ) {
catch( ArithmeticException e ) { System.out.println( "Division por cero" );
System.out.println( "Division por cero" ); throw e;
} }catch( Exception e ) {
catch( Exception e ) { System.out.println( "Se ha producido un error" );
System.out.println( "Se ha producido un error" ); }
} }catch(Exception e){
} System.out.println(e.getMessage());
} }
}
}
Java Excepciones 9 Java Excepciones 10

Gestión incompleta de excepciones Lanzamiento de excepciones


• Si un método no gestiona o captura todas las excepciones
que puede generar (excepto del tipo Error o RuntimeException) public class Alumno{
public Alumno(String nombre, String apellidos) throws Exception{
debe especificarlo mediante throws if(nombre == null || apellidos == null)
TipoDevuelto nombreMetodo(argumentos) throws listaExcepciones
throw new Exception("Argumentos no válidos");
{ /* cuerpo del método */ }
//si el constructor lanza la excepción el objeto no se crea
}
import java.io.*; public static void main(String args[]) {
public class PruebaExcepciones {
try{
public static char leer() throws IOException {
return (char) System.in.read();
Alumno alum = new Alumno(null, "hola");
} }catch (Exception e){
public static void main(String args[]) { System.out.println("Excepcion: "+ e.getMessage());
try { }
char car=leer(); }
System.out.println("Caracter: "+car); }
} catch (IOException e) {
System.out.println("Error de entrada de datos");}}

Java Excepciones 11 Java Excepciones 12


Excepciones definidas por el programador Ejemplo excepción definida por el usuario
Public class Persona{
• El programador puede definir sus propias clases de int edad;
.....
excepciones public void ponEdad(int ed) throws EdadFueraDeRangoException {
• Se define una clase que herede de Throwable o más if ((ed < 0) || (ed > 130))
throw new EdadFueraDeRangoException("Demasiado joven o demasiado viejo");
normalmente de Exception edad = ed;
}}

try {
public class EdadFueraDeRangoException extends Exception { alguien.ponEdad(150);
public EdadFueraDeRangoException (String texto) { } catch (EdadFueraDeRangoException e){
super(texto); System.out.println("se ha producido la excepción");
} e.printStackTrace();
} System.out.println(e.getMessage());
}

EdadFueraDeRangoException: Demasiado joven o demasiado viejo


at Persona.ponEdad<Persona.java>
at Persona.main<Persona.java>

Java Excepciones 13 Java Excepciones 14

También podría gustarte