Vous êtes sur la page 1sur 4

Manejo de Excepciones

Excepciones

Un programa correcto es aquel que actúa de


acuerdo a su especificación.
Manejo de Excepciones
Un programa confiable es correcto y además
tiene un comportamiento previsible, es decir
actúa razonablemente no sólo en situaciones
Manejo básico de excepciones.
normales sino también en circunstancias
Mecanismos. Usando excepciones.
Algunos casos simples anómalas, como por ejemplo fallas de hardware.
Desde el punto de vista de la aplicación las
situaciones consideradas normales dependen del
diseñador que analiza el problema.
Elementos de Programación 1 Elementos de Programación 2

Excepciones
Excepciones
Una excepción es cualquier evento anormal
durante la ejecución que puede provocar que una
operación falle. En este caso se puede reparar la falla,
capturando la excepción y alcanzando un estado
Un evento anormal no necesariamente es
que permita continuar la ejecución.
catastrófico y con frecuencia puede repararse de
modo tal que la ejecución continúe. En otras, el manejo de la excepción se reduce a
mostrar un mensaje, porque la situación no es
Un software que previene este tipo de
recuperable.
circunstancias se dice "tolerante a las fallas".
En ese caso la operación falla y probablemente el
programa se aborta.
Elementos de Programación 3 Elementos de Programación 4

Excepciones Excepciones

Algunos ejemplos típicos de excepciones detectadas


Una excepción es entonces cualquier situación implícitamente son:
anormal o poco frecuente que requiere ser • ArithmeticException División por 0, señalizado
capturada y manejada adecuadamente. por la operación /
Las excepciones pueden ser predefinidas por el • ArrayIndexOutOfBoundsException El acceso
lenguaje o definidas por el programador. fuera de rango dentro de un arreglo, señalizado por
Las excepciones predefinidas son más generales la operación de subindización
y son capturadas implícitamente por alguna • NullPointerException Se intenta acceder a un
operación predefinida. servicio de una variable de tipo clase pero esta no
está asociada a un objeto.
Elementos de Programación 5 Elementos de Programación 6

2009-Dpto.de Cs. de la Computación-UNComhaue


Manejo de Excepciones

Excepciones Presentación
 Debemos organizar un programa en secciones para el caso
En todos los ejemplos anteriores cuando se normal y también para el caso excepcional
captura la excepción aparece un mensaje de error  Ejemplos de excepciones: división por cero, entrada de

datos incorrecta en cuanto a su tipo


y el programa termina anormalmente.
Otra posibilidad es que el programador establezca  Una manera es implementar los programas incrementalmente
 codificar & probar el código para la operación normal
un manejador que especifique las acciones a
primero
realizar luego de que se captura la excepción.  Agregar el código para el caso excepcional más tarde

La acción puede ser algo tan simple como mostrar


 Tener en cuenta las excepciones, simplifica en desarrollo,
un mensaje de error diferente al predefinido o prueba, corrección y mantenimento. Los errores son más fáciles
puede de alguna manera ‘salvar’ la situación de aislar
anormal para reparar la excepción.
Elementos de Programación 7 Elementos de Programación 8

Warning: Terminología

 Lanzando una excepción (Throwing) : Java por sí mismo o


nuestro código señala cuando algo inusual pasa
 Los ejemplos que veremos están simplificados  Manejando una excepción (Handling): responde a una
con fines instruccionales excepción ejecutando una parte del programa escrita
específicamente para esa excepción
 También se llama catching an exception (atrapando)

 Los programas reales son más complicados y  El caso normal es manejado en un bloque try
 El caso excepcional es manejado en un bloque catch
generalmente tienen una organización diferente  El bloque catch toma un parámetro de tipo Exception

Se llama el parámetro del bloque-catch
 e es el nombre usado para este parámetro generalmente
 Si una excepción es lanzada, la ejecución en el bloque try
finaliza y el control pasa al bloque(s) catch después del bloque
try
Elementos de Programación 9 Elementos de Programación 10

La terna try-throw-catch Flujo de Programa try-throw-catch


Bloque Try
Las sentencias se ejecutan sobre la sentencia condicional throw.
Organización básica del código: Si la condición es true, la excepción es lanzada
try  El control pasa al bloque catch después del bloque try
{ Si la condición es false
<código a tratar>  La excepción no se lanza
if(condición de prueba)
 Las sentencias restantes en el bloque try (aquellas que siguen el
throw condicional) son ejecutadas
throw new Exception("Mensaje a imprimir");
<más código> Bloque Catch
} Se ejecuta si una excepción es lanzada
catch(Exception e)  Puede terminar la ejecución con una sentencia exit
{  Si no hace exit, la ejecución se reanuda después del bloque catch
<código de manejo de la excepción>
} Las sentencias después del bloque Catch
Se ejecutan tanto si la excepción fue o no.
<posiblemente más código>

Elementos de Programación 11 Elementos de Programación 12

2009-Dpto.de Cs. de la Computación-UNComhaue


Manejo de Excepciones

/** donas por vaso de leche */


try Flujo de Control del manejo de excepciones
int contDonas=0, contLeche=0;
Ejemplo de manejo {
double donasPorVaso=0.0;
de excepciones System.out.println(“Ingrese el Elnro.
usuario
Deingresa un número
donas:");
try positivo para el número de
contDonas = TecladoIn.readLineInt();
{
System.out.println("Ingrese el nro. de donas:"); System.out.println(“Ingrese el vasos,
nro. entonces ninguna
De vasos:");
contDonas = TecladoIn.readLineInt( );
sentencia excepción es lanzada.
contLeche = TecladoIn.readLineInt();
System.out.println(" Ingrese el nro.de vasos de leche:");
throw contLeche = TecladoIn.readLineInt( );
if (contLeche < 1)
throw new Exception("Excepcion: No hay leche!");
if (contLeche < 1)
throw new Exception("Excepcion: No hay leche!"); donasPorVaso = (double)contDonas/(double)contLeche;
bloque try donasPorVaso = (double)donasPorVasos/(double)contLeche;
System.out.println(contDonas + " donas.");
System.out.println(contDonas + " donas."); No se
System.out.println(contLeche + " vasos de leche.");
System.out.println(contLeche + " vasos de leche.");
System.out.println(" Hay " + donasPorVaso System.out.println(“Hay " + donasPorVaso); ejecuta
}
+ " donas por cada vaso de leche.");
} cuando no
catch(Exception e) hay
catch(Exception e)
{ { excepción
System.out.println(e.getMessage( ));
System.out.println(e.getMessage()); lanzada.
System.out.println(" Ir a comprar leche.");
bloque } System.out.println(“Ir a comprar leche.");
catch
System.out.println(" Fin del programa."); }
System.out.println(“Fin del Programa.");
Elementos de Programación 13 Elementos de Programación 14

try Flujo de Control del manejo de excepciones


{ Más acerca del Bloque catch
System.out.println(“Ingrese El
elusuario
nro. ingresa un cero o un
De donas:");
número de vasos, por eso una
contDonas = TecladoIn.readLineInt();
System.out.println(“Ingrese excepción
el nro. esDelanzada.
vasos:");
contLeche = TecladoIn.readLineInt();  Exception es la clase base de todas las excepciones
if (contLeche < 1)
throw new Exception("Excepcion: No hay leche!");  El bloque catch no es una definición de método (aunque
donasPorVaso = (double)contDonas/(double)contLeche; parece similar)
System.out.println(contDonas + " donas.");  Cada excepción hereda el método getMessage
System.out.println(contLeche + " vasos de leche.");  Este método carga el string dado al objeto-excepción cuando
System.out.println(“Hay " + donasPorVaso); fue lanzada la excepción, ej.
}
throw new Exception("Mensaje cargado");
catch(Exception e) No se ejecuta este segmento cuando una
{ excepción es lanzada
System.out.println(e.getMessage());
 Un bloque catch se aplica sólo sobre el bloque try que
inmediatamente lo precede
System.out.println(“Ir a comprar leche.");  Si ninguna excepción es lanzada, el bloque catch es ignorado
}
System.out.println(“Fin del Programa.");
Elementos de Programación 15 Elementos de Programación 16

Definiendo Clases de Excepción propias Ejemplo: Usando la clase


ExcepcionDividePorCero
public class ExcepcionDividePorCero extends Exception public void hacerEsto( ) {
{ try
public ExcepcionDividePorCero() {
{ System.out.println("Ingrese numerador:");
super("Dividiendo por Cero!"); this.numerador = TecladoIn.readLineInt( );
} System.out.println("Ingrese denominador:");
public ExcepcionDividePorCero(String mensaje) this.denominador = TecladoIn.readLineInt( );
{ if (this.denominador == 0)
super(mensaje); throw new ExcepcionDividePorCero(“Error:Division por 0” );
} double cociente =
} (double)this.numerador/(double)this.denominador;
System.out.println(this.numerador + "/" +
 Debe ser derivada (Herencia) desde una clase de excepción ya definida this.denominador + " = " + cociente);
 Generalmente el único método que necesitamos definir es el constructor }
 Incluye un constructor que toma un argumento String catch(ExcepcionDividePorCero e)
 También incluye un constructor por defecto con un llamado a super y un {
mensaje string por defecto System.out.println(e.getMessage( ));
System.out.println(“El calculo no fue realizado”);
}
Elementos de Programación 17 } Elementos de Programación 18

2009-Dpto.de Cs. de la Computación-UNComhaue


Manejo de Excepciones

Excepciones múltiples y bloques


catch en un Método El Bloque finally
Para completar las sentencias que componen una excepción,
 Los métodos pueden lanzar más de una excepción
presentamos el bloque finally
 Los bloques catch immediatamente seguidos por el  Podemos agregar un bloque finally después de los bloques
bloque try son analizados en secuencia para captar un
macheo del tipo de excepción try/catch
 El bloque finally se ejecuta sin importar si el bloque catch se
 El primer bloque catch que maneja el tipo de la

excepción es el único que se ejecuta ejecuta


 La organización del código utilizando el bloque finally será:
 Debemos colocar los bloques catch en orden de
especifidad: los más específicos primero, ej:
try bloque
 catch (ExcepcionDividePorCero e){ catch boque
} finally
catch (Exception e){ {
} <Código a ejecutarse exista o no una excepción lanzada>
}
Elementos de Programación 19 Elementos de Programación 20

Tres Posibilidades para un bloque try- Resumen


catch-finally
 Una excepción es un objeto descendiente de la clase Exception
 El bloque try se ejecuta hasta el final si ninguna excepción es
lanzada.  El manejo de excepciones nos permite diseñar código para los
 El bloque finally se ejecuta después del bloque try. casos normales separados de los casos excepcionales
 Una excepción es lanzada en el bloque try y atrapada en el  Podemos usar las clases de excepción predefinidas o definir la
macheo del bloque catch. nuestra
 El bloque finally se ejecuta después del bloque catch.  Las excepciones pueden ser lanzadas por:
 Una excepción es lanzada en el bloque try y no existe macheo en  Ciertas sentencias Java

el bloque catch.  Los métodos de las librerías de clase


 El bloque finally se ejecuta antes de que el método termine.
 Una excepción puede ser lanzada por
 El código que está después del bloque catch pero no en el
 Un bloque try, o
bloque finally no sería ejecutado en esta situación.
 Una definición de método sin un bloque try, pero la

Elementos de Programación 21
invocación al método sí está ubicada dentro de un bloque try22
Elementos de Programación

Resumen II

 Una excepción es atrapada por un bloque catch


 Un bloque try puede estar seguido por más de un bloque
catch
 Más de un bloque catch puede ser capaz de manejar la

excepción
 El primer bloque catch que pueda manejar la excepción,

es el único que se ejecuta


 Colocar los bloques catch en orden de especificidad, y el

más general al final

 No exagerar el uso de excepciones

Elementos de Programación 23

2009-Dpto.de Cs. de la Computación-UNComhaue

Vous aimerez peut-être aussi