Download excepciones - WordPress.com

Document related concepts
no text concepts found
Transcript
EXCEPCIONES
CORPORACION UNIVERSITARIA DEL CARIBE CECAR
PROGRAMA DE INGENIERIA DE SISTEMAS
LENGUAJES DE PROGRAMACION II
INTRODUCCION
 En la programación hay algo que siempre ocurre:
los errores en los programas.
¿qué sucede
realmente
después de
que ha
ocurrido el
error?
¿Qué
podemos
hacer con
él?
¿Cómo nos
damos
cuenta que
se ha
producido?
 Java utiliza excepciones para el manejo de los errores.
Por ejemplo…
¿Qué
sucede si
no se
puede abrir
el fichero?
¿Qué
sucede si no
se puede
cerrar el
fichero?
¿Qué
sucede si
la lectura
falla?
¿Qué sucede
si no se puede
determinar la
longitud del
fichero?
¿Qué sucede
si no hay
suficiente
memoria
libre?
¿Que hacer?
Ignorar que los
errores pueden
ocurrir
Utilizar
bloques if…else
Usar
excepciones
¿Qué es una excepción?
 Es un evento que ocurre durante la ejecución del
programa que interrumpe el flujo normal de las
sentencias
 Es una condición anormal ocurrida durante la
ejecución de un programa
 No necesariamente es un error
 Comportamiento no adecuado o no permitido
Ventajas de usar excepciones
Separar el Manejo de Errores del Código
"Normal“.
• Simplifican los programas ya que se diferencia el código
normal del código de tratamiento de errores
Programas mas robustos
• Se crean programas mas robustos ya que en muchos casos si
no se trata la excepción el programa no compila
Agrupar Errores y Diferenciación.
• Gracias a esto tenemos todos los posibles errores juntos y
podemos pensar una manera de tratarlos que sea adecuado.
Tipos errores y de excepciones
Compilación
Tipos de excepciones
Tipos de
errores
Ejecución
(Excepciones)
Fatales
provocan la terminación
inmediata de un programa en
ejecución.
Recuperables
pueden ser manipuladas, es
decir, existe la posibilidad de
corregirlas y continuar con la
ejecución del programa
Excepciones en Java
 Cuando ocurre una excepción, se crea un objeto que
contiene toda la información acerca de ésta.
 El interpretador (JVM) debe encontrar el código para
manejarla (lanzar la excepción).
 Si existe un código definido para el tipo de excepción,
este código atrapa la excepción.
 Si no existe código definido para este tipo de excepción,
el programa se termina.
Jerarquía de excepciones en Java
¿Qué se puede hacer con las excepciones?
 Tratar con las Excepciones Java


Gestionar la excepción
Re-lanzar la excepción
 Crear nuevas Excepciones
Tratando excepciones en Java
 El compilador de Java, indica cuando debemos gestionar una
excepción o lanzarla.

FileOutputStream.java:15: Warning: Exception java.io.IOException must be
caught, or it must be declared in throws clause of this method.
 Gestionar la excepción
 try, catch, y finally
 Para gestionar excepciones hay que insertar el código donde se puede
dar dentro de un bloque try.
 Se crea una lista de bloques catch adyacentes, uno por cada posible
excepción.
Manejador de excepciones
 El manejo de una Excepción en Java, se realiza a través
de las palabras reservadas:

try : Las instrucciones contenidas en un bloque try, lanzarán la
excepción si ésta ocurre.

catch: Atrapa la excepción lanzada y la maneja.

throw: lanza la excepción en el momento deseado.

throws: lanza la excepción fuera del método.

finally: instrucciones que siempre se ejecutan.
Lanzar Excepciones (try)
 Cuando en un método es probable que se produzca
una situación anómala, es necesario lanzar una
excepción y para ello se utiliza el bloque try.
 Sintaxis:
try {
//sentencias que se desea controlar
}
Atrapar Excepciones (catch)
 Las excepciones pueden ser capturadas y gestionadas en el
mismo método que las lanzó o en otro lugar del programa.
 Para atrapar la excepciones en el propio método se utiliza la
instrucción catch.
 Sintaxis:
catch (excepción objeto){
// sentencias para manejar la excepción
}
 Se debe escribir inmediatamente después del bloque try.
 Puede haber varios bloques catch para un bloque try, y cada bloque catch
manejará un tipo de excepción.
Bloque try-catch
try {
....
} catch (exception 1) {
...
} catch (exception 2) {
…
} catch (exception 3) {
}
...
Ejemplo del bloque try… catch
public class PruebaExcepciones {
public static void main(String args[]) {
int valor=5, cero=0;
int[] array = {1, 2, 3};
try {
valor = valor/cero; //división por cero
array[4]= 5; //acceso a una posición no
//disponible
}
catch( ArithmeticException e ) {
System.out.println( "Division por cero" );
}
catch( Exception e ) {
System.out.println( "Se ha producido un error" );
}
}
}
Bloque finally
 Este bloque es opcional y debe ir después de todos los bloques catch
implementados.
 Si se incluye, sus sentencias se ejecutan siempre, sea cual sea el tipo de
excepción que se produzca, o incluso si no se produce ninguna (se
ejecuta incluso si dentro de los bloques try/catch hay una sentencia
continue, break o return).
 La única situación en la que la sentencia finally no se ejecuta es si se
llama al método System.exit (), que termina la ejecución del
programa.
 El bloque finally se debe utilizar particularmente en aquellos casos en
que, se necesita recuperar o devolver a su situación original algunos
elementos (objetos, recursos).
Sintaxis del bloque finally
try {
// Código que puede
} catch (A a1) {
// Se ocupa de la
} catch (B b1) {
// Se ocupa de la
} catch (C c1) {
// Se ocupa de la
} finally {
// Sentencias que
}
lanzar una excepción de tipo A, B o C
excepción A
excepción B
excepción C
se ejecutarán en cualquier caso
Bloque throw
 La sentencia throw (lanzar) se puede emplear para
indicar que ha ocurrido una excepción,
particularmente cuando se quiere lanzar una
excepción propia.
 throw requiere un simple argumento: un objeto de
la clase Throwable, esta clase tiene dos subclases
principales: Exception y Error.
Propagación de excepciones
Entorno Java
(java runtime)
Llamada a
los métodos
Método main()
Primer método
Segundo método
(Excepción generada aquí)
Paso de
excepciones
Relanzar Excepciones - throws
 En ciertos casos, cuando un método puede generar
una situación anómala, y no se desea manipular la
excepción en el código del propio método, es posible
que se pase o se “relance” la excepción al método
invocador, para ello se utiliza la sentencia throws.
 Sintaxis:
void metodo() throws excepcion{
// Código que puede lanzar las excepciones
...
} // fin del método
Excepciones propias
 La clase Exception, normalmente tiene dos
constructores.
 Ejemplo:
public class MiExcepcion extends Exception{
public MiExcepcion()
{ super(); }
public MiExcepcion(String cadena)
{ super(cadena); }
} // fin de la clase
Ejemplo excepciones de java
public class Alumno
{
private String nombre , private String apellido, private Integer edad;
public Alumno(String nombre, String apellido, Integer edad) throws Exception
{
this.nombre = nombre;
this.apellido = apellido;
if (edad <= 0){
throw new Exception("La debe edad ser mayor a cero");
}else{
this.edad = edad;
}
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public Integer getEdad() {
return edad;
}
}
public class Test {
public static void main (String []arguments){
try {
Alumno alu1 = new Alumno("Marcos", "Fernandez", -2);
} catch (Exception e) {
system.out.println(e.getMessage());
}
}
}
Ejemplo excepciones propias
public class InvalidYearException extends Exception {
public YearInvalidException(String mensaje){
super(mensaje);
}
}
public class Alumno {
private String nombre, String apellido, Integer edad;
public Alumno(String nombre, String apellido, Integer edad) throws InvalidYearException {
this.nombre = nombre;
this.apellido = apellido;
if (edad <= 0){
throw new InvalidYearException("La edad debe ser mayor a cero");
}else{
this.edad = edad;
}
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public Integer getEdad() {
return edad;
}
}
public class Test {
public static void main(String []arguments){
try {
Alumno alu1 = new Alumno("Marcos", "Fernandez", -2);
} catch (InvalidYearException e) {
System.out.println("Se atrapo una excepcion del tipo InvalidYearException");
System.out.println(e.getMessage());
}
}
}